More Docs updates.
authorWim Taymans <wim.taymans@gmail.com>
Wed, 25 Oct 2000 19:09:53 +0000 (19:09 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Wed, 25 Oct 2000 19:09:53 +0000 (19:09 +0000)
Original commit message from CVS:
More Docs updates.
Added plugin documentation. I fear we need a gstdoc implementation
that loads plugins and does introspection on them. I think we should
automatically create the docs for the pads and mime types the plugins
provide. Does anyone have enough perl knowledge to add these features? I
allready changed the C code to output the pad definitions but my perl
knowledge is too limited, for now, to implement the rest of the needed
functionality...

80 files changed:
configure.in
docs/plugins/Makefile.am [new file with mode: 0644]
docs/plugins/gstdoc-mkdb [new file with mode: 0755]
docs/plugins/gstdoc-mktmpl [new file with mode: 0755]
docs/plugins/gstdoc-scanobj [new file with mode: 0755]
docs/plugins/gstreamer-plugins-docs.sgml [new file with mode: 0644]
docs/plugins/gstreamer-plugins-sections.txt [new file with mode: 0644]
docs/plugins/tmpl/ac3dec.sgml [new file with mode: 0644]
docs/plugins/tmpl/ac3parse.sgml [new file with mode: 0644]
docs/plugins/tmpl/audioscale.sgml [new file with mode: 0644]
docs/plugins/tmpl/cobin.sgml [new file with mode: 0644]
docs/plugins/tmpl/dvdsrc.sgml [new file with mode: 0644]
docs/plugins/tmpl/example.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstaviencoder.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstjpeg.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstjpegdec.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstjpegenc.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstmpeg1encoder.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstmpeg2enc.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstmpeg2play.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstmpeg_play.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstmpegaudio.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstmpg123.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstparseau.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstparseavi.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstparsewav.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstreamer-plugins-unused.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstspectrum.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstv4lsrc.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstwincodec.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstwindec.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstwinenc.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstxa.sgml [new file with mode: 0644]
docs/plugins/tmpl/gstxing.sgml [new file with mode: 0644]
docs/plugins/tmpl/median.sgml [new file with mode: 0644]
docs/plugins/tmpl/mp1videoparse.sgml [new file with mode: 0644]
docs/plugins/tmpl/mp2videoparse.sgml [new file with mode: 0644]
docs/plugins/tmpl/mp3parse.sgml [new file with mode: 0644]
docs/plugins/tmpl/mpeg1parse.sgml [new file with mode: 0644]
docs/plugins/tmpl/mpeg2parse.sgml [new file with mode: 0644]
docs/plugins/tmpl/mpeg2subt.sgml [new file with mode: 0644]
docs/plugins/tmpl/rtjpegdec.sgml [new file with mode: 0644]
docs/plugins/tmpl/rtjpegenc.sgml [new file with mode: 0644]
docs/plugins/tmpl/smooth.sgml [new file with mode: 0644]
docs/plugins/tmpl/smoothwave.sgml [new file with mode: 0644]
docs/plugins/tmpl/spindentity.sgml [new file with mode: 0644]
docs/plugins/tmpl/stereo.sgml [new file with mode: 0644]
docs/plugins/tmpl/synaesthesia.sgml [new file with mode: 0644]
docs/plugins/tmpl/system_encode.sgml [new file with mode: 0644]
docs/plugins/tmpl/vcdsrc.sgml [new file with mode: 0644]
docs/plugins/tmpl/videoscale.sgml [new file with mode: 0644]
docs/plugins/tmpl/videosink.sgml [new file with mode: 0644]
docs/plugins/tmpl/volume.sgml [new file with mode: 0644]
docs/plugins/tmpl/vorbisdec.sgml [new file with mode: 0644]
docs/plugins/tmpl/vorbisenc.sgml [new file with mode: 0644]
docs/plugins/tmpl/vumeter.sgml [new file with mode: 0644]
gst/elements/gstasyncdisksrc.c
gst/elements/gstaudiosink.c
gst/gstbufferpool.c
gst/gstconnection.c
gst/gstcpu.c
gst/gstcpu.h
gst/gstelement.c
gst/gstelement.h
gst/gstelementfactory.c
gst/gstmeta.c
gst/gstmeta.h
gst/gstpad.c
gst/gstplugin.c
gst/gstthread.c
gst/gstthread.h
gst/gstutils.c
gst/gstxml.c
libs/colorspace/gstcolorspace.h
libs/idct/gstidct.h
libs/riff/gstriff.h
plugins/elements/gstasyncdisksrc.c
plugins/elements/gstaudiosink.c
test/ac3play.c
test/qtest.c

index e65c6dc2330bc7ac2c80e387ccf48750fcc297c9..6d76473616d4eba2260b2cbd384f1194f6d8b455 100644 (file)
@@ -476,6 +476,9 @@ tools/Makefile
 docs/Makefile
 docs/gst/Makefile
 docs/gst/gstreamer.types
+docs/libs/Makefile
+docs/plugins/Makefile
+docs/plugins/gstreamer-plugins.types
 docs/manual/Makefile
 docs/manual/images/Makefile
 stamp.h
diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am
new file mode 100644 (file)
index 0000000..e5e1277
--- /dev/null
@@ -0,0 +1,96 @@
+## Process this file with automake to produce Makefile.in
+
+# The name of the module.
+DOC_MODULE=gstreamer-plugins
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code (if it contains documentation).
+DOC_SOURCE_DIR=$(top_srcdir)/plugins
+
+INCLUDES = $(GLIB_CFLAGS) $(GTK_CFLAGS) -I$(top_srcdir)
+LDADD = $(GLIB_LIBS) $(GTK_LIBS) $(top_srcdir)/gst/libgst.la
+
+CFLAGS = `gstreamer-config --cflags` -Wall -g
+LDFLAGS = `gstreamer-config --libs` 
+
+EXTRA_DIST=$(DOC_MODULE).types.in
+
+HTML_DIR=$(datadir)/$(DOC_MODULE)/html
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+tmpl_sources =                         \
+       tmpl/videoraw.sgml
+
+gstreamer_docdir = $(HTML_DIR)
+gstreamer_doc_DATA =           \
+       $(DOC_MODULE).html              \
+       $(DOC_MODULE).hierarchy \
+       $(DOC_MODULE).types             \
+       $(DOC_MODULE)-sections.txt
+
+SCANOBJS_FILES =               \
+       $(DOC_MODULE).signals   \
+       $(DOC_MODULE).hierarchy \
+       $(DOC_MODULE).args
+
+if HAVE_GTK_DOC
+$(DOC_MODULE).html: html/book1.html
+       -cd $(srcdir) && cp html/book1.html $(DOC_MODULE).html
+else
+$(DOC_MODULE).html:
+endif
+
+html/book1.html: sgml/$(DOC_MODULE)-doc.bottom
+       $(MAKE) html
+
+sgml/$(DOC_MODULE)-doc.bottom: $(tmpl_sources)
+       $(MAKE) sgml
+
+scanobj:
+       CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" ./gstdoc-scanobj --module=$(DOC_MODULE)
+
+tmpl: scanobj 
+       ./gstdoc-mktmpl --module=$(DOC_MODULE)
+
+sgml: tmpl
+       ./gstdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)
+
+html:
+       if ! test -d html ; then mkdir html ; fi
+       -cd html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+
+clean-local:
+       rm -f *~ *.bak *.signals *-unused.txt *.args
+
+maintainer-clean-local: clean
+       rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt 
+
+install-data-local:
+       $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)
+       (installfiles=`echo $(srcdir)/html/*.html`; \
+       if test "$$installfiles" = '$(srcdir)/html/*.html'; \
+       then echo '-- Nothing to install' ; \
+       else \
+         for i in $$installfiles; do \
+           echo '-- Installing '$$i ; \
+           $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+         done; \
+         echo '-- Installing $(srcdir)/html/index.sgml' ; \
+         $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR); \
+         echo '-- Fixing Crossreferences' ; \
+         gtkdoc-fixxref --module=$(DOC_MODULE) --html-dir=$(HTML_DIR)|| true; \
+       fi)
+
+dist-hook:
+       mkdir $(distdir)/html
+       mkdir $(distdir)/sgml
+       mkdir $(distdir)/tmpl
+       -cp $(srcdir)/html/*.html $(srcdir)/html/*.css $(distdir)/html
+       -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       -cp $(srcdir)/sgml/*.sgml $(distdir)/sgml
+       -cp $(srcdir)/sgml/*.bottom $(srcdir)/sgml/*.top $(distdir)/sgml
+
+.PHONY : html sgml templates 
diff --git a/docs/plugins/gstdoc-mkdb b/docs/plugins/gstdoc-mkdb
new file mode 100755 (executable)
index 0000000..b8e4dcd
--- /dev/null
@@ -0,0 +1,2273 @@
+#!/usr/bin/perl -w
+#
+# 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.
+#
+
+#############################################################################
+# Script      : gtkdoc-mkdb
+# Description : This creates the DocBook files from the edited templates.
+#
+#              NOTE: When creating SGML IDS, we append -CAPS to all
+#               all-caps identifiers to prevent name clashes. (It basically
+#               never is the case that mixed-case identifiers would collide.)
+#              See the CreateValidSGMLID function.
+#############################################################################
+
+use strict;
+use Getopt::Long;
+
+# Options
+
+# name of documentation module
+my $MODULE;
+my $TMPL_DIR;
+my $SGML_OUTPUT_DIR;
+my @SOURCE_DIRS;
+
+my %optctl = (module => \$MODULE,
+             'source-dir' => \@SOURCE_DIRS,
+             'output-dir' => \$SGML_OUTPUT_DIR,
+             'tmpl-dir' => \$TMPL_DIR);
+GetOptions(\%optctl, "module=s", "source-dir:s", "output-dir:s");
+
+my $ROOT_DIR = ".";
+
+# All the files are written in subdirectories beneath here.
+$TMPL_DIR = $TMPL_DIR ? $TMPL_DIR : "$ROOT_DIR/tmpl";
+
+# This is where we put all the DocBook output.
+$SGML_OUTPUT_DIR = $SGML_OUTPUT_DIR ? $SGML_OUTPUT_DIR : "$ROOT_DIR/sgml";
+
+# This file contains the object hierarchy.
+my $OBJECT_TREE_FILE = "$ROOT_DIR/$MODULE.hierarchy";
+
+# This file contains signal arguments and names.
+my $SIGNALS_FILE = "$ROOT_DIR/$MODULE.signals";
+
+# The file containing Arg information.
+my $ARGS_FILE = "$ROOT_DIR/$MODULE.args";
+
+# These global arrays store information on signals. Each signal has an entry
+# in each of these arrays at the same index, like a multi-dimensional array.
+my @SignalObjects;     # The GtkObject which emits the signal.
+my @SignalNames;       # The signal name.
+my @SignalReturns;     # The return type.
+my @SignalPrototypes;  # The rest of the prototype of the signal handler.
+
+# These global arrays store information on Args. Each Arg has an entry
+# in each of these arrays at the same index, like a multi-dimensional array.
+my @ArgObjects;                # The GtkObject which has the Arg.
+my @ArgNames;          # The Arg name.
+my @ArgTypes;          # The Arg type - gint, GtkArrowType etc.
+my @ArgFlags;          # How the Arg can be used - readable/writable etc.
+
+# These global hashes store declaration info keyed on a symbol name.
+my %Declarations;
+my %DeclarationTypes;
+my %DeclarationConditional;
+my %DeclarationOutput;
+
+# These global hashes store the existing documentation.
+my %SymbolDocs;
+my %SymbolTypes;
+my %SymbolParams;
+
+# These global hashes store documentation scanned from the source files.
+my %SourceSymbolDocs;
+my %SourceSymbolParams;
+
+# These global arrays store GtkObject and subclasses and the hierarchy.
+my @Objects;
+my @ObjectLevels;
+
+
+# Create the root DocBook output directory if it doens't exist.
+if (! -e $SGML_OUTPUT_DIR) {
+    mkdir ("$SGML_OUTPUT_DIR", 0777)
+       || die "Can't create directory: $SGML_OUTPUT_DIR";
+}
+
+# Function and other declaration output settings.
+my $RETURN_TYPE_FIELD_WIDTH = 12;
+my $SYMBOL_FIELD_WIDTH = 32;
+my $SIGNAL_FIELD_WIDTH = 12;
+
+&ReadSignalsFile ($SIGNALS_FILE);
+&ReadArgsFile ($ARGS_FILE);
+&ReadObjectHierarchy;
+
+# FIXME: this is the header file output at the top of the Synopsis.
+# We should allow this to be changed in the MODULE-sections.txt file.
+# gnome.h includes gtk/gtk.h which includes gdk/gdk.h which includes glib.h
+# so what should we output? - alternatives?
+my $HEADER_FILE = "";
+if ($MODULE eq 'glib') {
+    $HEADER_FILE = "glib.h";
+} elsif ($MODULE eq 'gdk') {
+    $HEADER_FILE = "gtk/gdk.h";
+} elsif ($MODULE eq 'gtk') {
+    $HEADER_FILE = "gtk/gtk.h";
+} elsif ($MODULE eq 'gnome' || $MODULE eq 'gnomeui') {
+    $HEADER_FILE = "gnome.h";
+}
+
+for my $dir (@SOURCE_DIRS) {
+    &ReadSourceDocumentation ($dir);
+}
+
+&OutputSGML ("$ROOT_DIR/$MODULE-sections.txt");
+
+
+#############################################################################
+# Function    : OutputObjectList
+# Description : This outputs the alphabetical list of objects, in a columned
+#              table. FIXME: Currently this also outputs ancestor objects
+#              which may not actually be in this module. 
+# Arguments   : none
+#############################################################################
+
+sub OutputObjectList {
+    my $cols = 3;
+
+    open (OUTPUT, ">$SGML_OUTPUT_DIR/object_index.sgml")
+       || die "Can't create $SGML_OUTPUT_DIR/object_index.sgml";
+    print (OUTPUT <<EOF);
+<informaltable pgwide=1 frame="none">
+<tgroup cols="$cols">
+<colspec colwidth="1*">
+<colspec colwidth="1*">
+<colspec colwidth="1*">
+<tbody>
+EOF
+
+    my $count = 0;
+    my $object;
+    foreach $object (sort(@Objects)) {
+       my $xref = &MakeXRef ($object);
+       if ($count % $cols == 0) { print (OUTPUT "<row>\n"); }
+       print (OUTPUT "<entry>$xref</entry>\n");
+       if ($count % $cols == ($cols - 1)) { print (OUTPUT "</row>\n"); }
+       $count++;
+    }
+
+    print (OUTPUT <<EOF);
+</tbody></tgroup></informaltable>
+EOF
+    close (OUTPUT);
+}
+
+
+#############################################################################
+# Function    : OutputSGML
+# Description : This collects the output for each section of the docs, and
+#              outputs each file when the end of the section is found.
+# Arguments   : $file - the $MODULE-sections.txt file which contains all of
+#              the functions/macros/structs etc. being documented, organised
+#              into sections and subsections.
+#############################################################################
+
+sub OutputSGML {
+    my ($file) = @_;
+    
+    open (INPUT, $file)
+       || die "Can't open $file";
+    my $book_top = "";
+    my $book_bottom = "";
+    my $includes = "";
+    my $section_includes = "";
+    my $in_section = 0;
+    my $title = "";
+    my $subsection = "";
+    my $synopsis;
+    my $details;
+    my $num_symbols;
+    while (<INPUT>) {
+       if (m/^#/) {
+           next;
+
+       } elsif (m/^<SECTION>/) {
+           $synopsis = "";
+           $details = "";
+           $num_symbols = 0;
+           $in_section = 1;
+
+       } elsif (m/^<SUBSECTION\s*(.*)>/i) {
+           $synopsis .= "\n";
+           $subsection = $1;
+
+       } elsif (m/^<SUBSECTION>/) {
+
+       } elsif (m/^<TITLE>(.*)<\/TITLE>/) {
+           $title = $1;
+#          print "Section: $title\n";
+
+           # We don't want warnings if object & class structs aren't used.
+           $DeclarationOutput{$title} = 1;
+           $DeclarationOutput{"${title}Class"} = 1;
+
+       } elsif (m/^<FILE>(.*)<\/FILE>/) {
+           $file = $1;
+           %SymbolDocs = ();
+           %SymbolTypes = ();
+           %SymbolParams = ();
+           &ReadTemplateFile ("$TMPL_DIR/$file.sgml", 1);
+           &MergeSourceDocumentation;
+
+       } elsif (m/^<INCLUDE>(.*)<\/INCLUDE>/) {
+           if ($in_section) {
+               $section_includes = $1;
+           } else {
+               $includes = $1;
+           }
+
+       } elsif (m/^<\/SECTION>/) {
+           if ($title eq "") {
+               $title = $file;
+           }
+#          print "End of section: $title\n";
+
+           $file =~ s/\s/_/g;
+           $file .= ".sgml";
+
+           # GtkObjects use their class name as the ID.
+           my $section_id;
+           if (&CheckIsObject ($title)) {
+               $section_id = &CreateValidSGMLID ($title);
+           } else {
+               $section_id = &CreateValidSGMLID ("$MODULE-$title");
+           }
+
+           if ($num_symbols > 0) {
+               $book_top .= "<!entity $section_id SYSTEM \"sgml/$file\">\n";
+               $book_bottom .= "    &$section_id;\n";
+
+               if ($section_includes eq "") {
+                   $section_includes = $includes;
+               }
+
+               &OutputSGMLFile ($file, $title, $section_id, $section_includes,
+                                \$synopsis, \$details);
+           }
+           $title = "";
+           $subsection = "";
+           $in_section = 0;
+           $section_includes = "";
+
+       } elsif (m/^(\S+)/) {
+           my $symbol = $1;
+           #print "  Symbol: $symbol\n";
+
+           my $declaration = $Declarations{$1};
+           if (defined ($declaration)) {
+               # We don't want standard macros/functions of GtkObjects,
+               # or private declarations.
+               if ($subsection ne "Standard" && $subsection ne "Private") {
+                   my ($synop, $desc) = &OutputDeclaration ($symbol,
+                                                            $declaration);
+                   $synopsis .= $synop;
+                   $details .= $desc;
+               }
+
+               # Note that the declaration has been output.
+               $DeclarationOutput{$symbol} = 1;
+           } else {
+               print "WARNING: No declaration for: $1\n";
+           }
+           $num_symbols++;
+       }
+    }
+    close (INPUT);
+
+    &OutputBook ($book_top, $book_bottom);
+}
+
+
+#############################################################################
+# Function    : OutputDeclaration
+# Description : Returns the synopsis and detailed description DocBook
+#              describing one function/macro etc.
+# Arguments   : $symbol - the name of the function/macro begin described.
+#              $declaration - the declaration of the function/macro.
+#############################################################################
+
+sub OutputDeclaration {
+    my ($symbol, $declaration) = @_;
+
+    my $type = $DeclarationTypes {$symbol};
+    if ($type eq 'MACRO') {
+       return &OutputMacro ($symbol, $declaration);
+    } elsif ($type eq 'TYPEDEF') {
+       return &OutputTypedef ($symbol, $declaration);
+    } elsif ($type eq 'STRUCT') {
+       return &OutputStruct ($symbol, $declaration);
+    } elsif ($type eq 'ENUM') {
+       return &OutputEnum ($symbol, $declaration);
+    } elsif ($type eq 'UNION') {
+       return &OutputUnion ($symbol, $declaration);
+    } elsif ($type eq 'VARIABLE') {
+       return &OutputVariable ($symbol, $declaration);
+
+    } elsif ($type eq 'FUNCTION') {
+       return &OutputFunction ($symbol, $declaration, $type);
+    } elsif ($type eq 'USER_FUNCTION') {
+       return &OutputFunction ($symbol, $declaration, $type);
+    } else {
+       die "Unknown symbol type";
+    }
+}
+
+
+#############################################################################
+# Function    : OutputMacro
+# Description : Returns the synopsis and detailed description of a macro.
+# Arguments   : $symbol - the macro.
+#              $declaration - the declaration of the macro.
+#############################################################################
+
+sub OutputMacro {
+    my ($symbol, $declaration) = @_;
+    my $id = &CreateValidSGMLID ($symbol);
+    my $synop = "#define     <link linkend=\"$id\">$symbol</link>";
+    my $desc;
+    my $args = "";
+    if ($declaration =~ m/^\s*#\s*define\s+\w+(\([^\)]*\))/) {
+       $args = $1;
+
+       if (length ($symbol) < $SYMBOL_FIELD_WIDTH) {
+           $synop .= (' ' x ($SYMBOL_FIELD_WIDTH - length ($symbol)));
+       }
+
+       $synop .= &CreateValidSGML ($args);
+    }
+    $synop .= "\n";
+
+    if ($args ne "") {
+       $desc = "<refsect2>\n<title><anchor id=\"$id\">${symbol}()</title>\n";
+    } else {
+       $desc = "<refsect2>\n<title><anchor id=\"$id\">$symbol</title>\n";
+    }
+    # Don't output the macro definition if is is a conditional macro or it
+    # looks like a function, i.e. starts with "g_" or "_?gnome_", or it is
+    # longer than 2 lines, otherwise we get lots of complicated macros like
+    # g_assert.
+    if (!defined ($DeclarationConditional{$symbol}) && ($symbol !~ m/^g_/)
+       && ($symbol !~ m/^_?gnome_/) && (($declaration =~ tr/\n//) < 2)) {
+       $declaration = &CreateValidSGML ($declaration);
+       $desc .= "<programlisting>$declaration</programlisting>\n";
+    } else {
+       $desc .= "<programlisting>#define     $symbol";
+       $desc .= &CreateValidSGML ($args);
+       $desc .= "</programlisting>\n";
+    }
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+    $desc .= &OutputParamDescriptions ("MACRO", $symbol);
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputTypedef
+# Description : Returns the synopsis and detailed description of a typedef.
+# Arguments   : $symbol - the typedef.
+#              $declaration - the declaration of the typedef,
+#                e.g. 'typedef unsigned int guint;'
+#############################################################################
+
+sub OutputTypedef {
+    my ($symbol, $declaration) = @_;
+    my $id = &CreateValidSGMLID ($symbol);
+    my $synop = "typedef     <link linkend=\"$id\">$symbol</link>;\n";
+    my $desc = "<refsect2>\n<title><anchor id=\"$id\">$symbol</title>\n";
+    if (!defined ($DeclarationConditional{$symbol})) {
+       $declaration = &CreateValidSGML ($declaration);
+       $desc .= "<programlisting>$declaration</programlisting>\n";
+    }
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputStruct
+# Description : Returns the synopsis and detailed description of a struct.
+#              We check if it is a widget struct, and if so we only output
+#              parts of it that are noted as public fields.
+#              We also use a different SGML ID for widget structs, since the
+#              original ID is used for the entire RefEntry.
+# Arguments   : $symbol - the struct.
+#              $declaration - the declaration of the struct.
+#############################################################################
+
+sub OutputStruct {
+    my ($symbol, $declaration) = @_;
+
+    my $is_widget_struct = 0;
+    if (&CheckIsObject ($symbol)) {
+#      print "Found widget struct: $symbol\n";
+       $is_widget_struct = 1;
+    }
+
+    my $id;
+    if ($is_widget_struct) {
+       $id = &CreateValidSGMLID ($symbol . "_struct");
+    } else {
+       $id = &CreateValidSGMLID ($symbol);
+    }
+    my $synop = "struct      <link linkend=\"$id\">$symbol</link>;\n";
+    my $desc = "<refsect2>\n<title><anchor id=\"$id\">struct $symbol</title>\n";
+
+    # Form a pretty-printed, private-data-removed form of the declaration
+
+    my $decl_out;
+    if ($declaration =~ m/^\s*$/) {
+#      print "Found opaque struct\n";
+       $decl_out = "struct $symbol;";
+    } elsif ($is_widget_struct) {
+       my $public = 0;
+       my $new_declaration = "";
+       my $decl_line;
+       foreach $decl_line (split (/\n/, $declaration)) {
+#          print "Struct line: $decl_line\n";
+           if ($decl_line =~ m%/\*\s*<\s*public\s*>\s*\*/%) {
+               $public = 1;
+           } elsif ($decl_line =~ m%/\*\s*<\s*private\s*>\s*\*/%) {
+               $public = 0;
+           } elsif ($public) {
+               $new_declaration .= $decl_line . "\n";
+           }
+       }
+       if ($new_declaration) {
+           $decl_out = "struct $symbol {\n" . $new_declaration;
+           # If we finished with public set, we already have the struct end.
+           if ($public == 0) {
+               $decl_out .= "};\n";
+           }
+       } else {
+           $decl_out = "struct $symbol;";
+       }
+    } else {
+       $decl_out = $declaration;
+    }
+
+    $decl_out = &CreateValidSGML ($decl_out);
+    $desc .= "<programlisting>$decl_out</programlisting>\n";
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+
+    # Create a table of fields and descriptions
+
+    # FIXME: Inserting &nbsp's into the produced type declarations here would
+    #        improve the output in most situations ... except for function
+    #        members of structs!
+    my @fields = ParseStructDeclaration($declaration, $is_widget_struct, \&MakeXRef,
+                                       sub {
+                                           "<structfield>$_[0]</structfield>";
+                                       });
+    my $params = $SymbolParams{$symbol};
+
+    # If no parameters are filled in, we don't generate the description
+    # table, for backwards compatibility 
+
+    my $found = 0;
+    if (defined $params) {
+       for (my $i = 1; $i <= $#$params; $i += 2) {
+           if ($params->[$i] =~ /\S/) {
+               $found = 1;
+               last;
+           }
+       }
+    }
+    
+    if ($found) {
+       my %field_descrs = @$params;
+       
+           $desc .= <<EOF;
+<informaltable pgwide=1 frame="none" role="struct">
+<tgroup cols="2">
+<colspec colwidth="2*">
+<colspec colwidth="8*">
+<tbody>
+EOF
+       while (@fields) {
+           my $field_name = shift @fields;
+           my $text = shift @fields;
+           my $field_descr = $field_descrs{$field_name};
+
+           $desc .= "<row>\n<entry>$text</entry>\n";
+           if (defined $field_descr) {
+               $desc .= "<entry>".&ExpandAbbreviations($field_descr)."</entry>\n";
+           } else {
+               $desc .= "<entry></entry>\n";
+           }
+            $desc .= "</row>\n";
+       }
+    
+       $desc .= "</tbody></tgroup></informaltable>";
+    }
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputEnum
+# Description : Returns the synopsis and detailed description of a enum.
+# Arguments   : $symbol - the enum.
+#              $declaration - the declaration of the enum.
+#############################################################################
+
+sub OutputEnum {
+    my ($symbol, $declaration) = @_;
+    my $id = &CreateValidSGMLID ($symbol);
+    my $synop = "enum        <link linkend=\"$id\">$symbol</link>;\n";
+    my $desc = "<refsect2>\n<title><anchor id=\"$id\">enum $symbol</title>\n";
+    $declaration = &CreateValidSGML ($declaration);
+    $desc .= "<programlisting>$declaration</programlisting>\n";
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+
+    # Create a table of fields and descriptions
+
+    my @members = ParseEnumDeclaration($declaration);
+    my $params = $SymbolParams{$symbol};
+
+    # If no parameters are filled in, we don't generate the description
+    # table, for backwards compatibility 
+
+    my $found = 0;
+    if (defined $params) {
+       for (my $i = 1; $i <= $#$params; $i += 2) {
+           if ($params->[$i] =~ /\S/) {
+               $found = 1;
+               last;
+           }
+       }
+    }
+    
+    if ($found) {
+       my %member_descrs = @$params;
+       
+           $desc .= <<EOF;
+<informaltable pgwide=1 frame="none" role="enum">
+<tgroup cols="2">
+<colspec colwidth="2*">
+<colspec colwidth="8*">
+<tbody>
+EOF
+       for my $member_name (@members) {
+           my $member_descr = $member_descrs{$member_name};
+           
+           $desc .= "<row>\n<entry><literal>$member_name</literal></entry>\n";
+           if (defined $member_descr) {
+               $desc .= "<entry>".&ExpandAbbreviations($member_descr)."</entry>\n";
+           } else {
+               $desc .= "<entry></entry>\n";
+           }
+            $desc .= "</row>\n";
+       }
+    
+       $desc .= "</tbody></tgroup></informaltable>";
+    }
+
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputUnion
+# Description : Returns the synopsis and detailed description of a union.
+# Arguments   : $symbol - the union.
+#              $declaration - the declaration of the union.
+#############################################################################
+
+sub OutputUnion {
+    my ($symbol, $declaration) = @_;
+    my $id = &CreateValidSGMLID ($symbol);
+    my $synop = "union       <link linkend=\"$id\">$symbol</link>;\n";
+    my $desc = "<refsect2>\n<title><anchor id=\"$id\">union $symbol</title>\n";
+    $declaration = &CreateValidSGML ($declaration);
+    $desc .= "<programlisting>$declaration</programlisting>\n";
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputVariable
+# Description : Returns the synopsis and detailed description of a variable.
+# Arguments   : $symbol - the extern'ed variable.
+#              $declaration - the declaration of the variable.
+#############################################################################
+
+sub OutputVariable {
+    my ($symbol, $declaration) = @_;
+    my $id = &CreateValidSGMLID ($symbol);
+
+    my $synop;
+    if ($declaration =~ m/^\s*extern\s+((const\s+|unsigned\s+)*\w+)(\s+\*+|\*+|\s)(\s*)([A-Za-z]\w*)\s*;/) {
+       my $mod = defined ($1) ? $1 : "";
+       my $ptr = defined ($3) ? $3 : "";
+       my $space = defined ($4) ? $4 : "";
+       $synop = "extern      $mod$ptr$space<link linkend=\"$id\">$symbol</link>;\n";
+
+    } else {
+       $synop = "extern      <link linkend=\"$id\">$symbol</link>;\n";
+    }
+
+    my $desc = "<refsect2>\n<title><anchor id=\"$id\">$symbol</title>\n";
+    $declaration = &CreateValidSGML ($declaration);
+    $desc .= "<programlisting>$declaration</programlisting>\n";
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputFunction
+# Description : Returns the synopsis and detailed description of a function.
+# Arguments   : $symbol - the function.
+#              $declaration - the declaration of the function.
+#############################################################################
+
+sub OutputFunction {
+    my ($symbol, $declaration, $symbol_type) = @_;
+    my $id = &CreateValidSGMLID ($symbol);
+
+    # Take out the return type
+    $declaration =~ s/<RETURNS>\s*(const\s+|unsigned\s+)*(\w+)\s*(\**)\s*<\/RETURNS>\n//;
+    my $type_modifier = defined($1) ? $1 : "";
+    my $type = $2;
+    my $pointer = $3;
+    my $xref = &MakeXRef ($type);
+    my $start = "";
+    if ($symbol_type eq 'USER_FUNCTION') {
+#      $start = "typedef ";
+    }
+
+    my $ret_type_len = length ($start) + length ($type_modifier)
+       + length ($pointer) + length ($type);
+    my $ret_type_output;
+    my $symbol_len;
+    if ($ret_type_len < $RETURN_TYPE_FIELD_WIDTH) {
+       $ret_type_output = "$start$type_modifier$xref$pointer"
+           . (' ' x ($RETURN_TYPE_FIELD_WIDTH - $ret_type_len));
+       $symbol_len = 0;
+    } else {
+#      $ret_type_output = "$start$type_modifier$xref$pointer\n"
+#          . (' ' x $RETURN_TYPE_FIELD_WIDTH);
+
+       $ret_type_output = "$start$type_modifier$xref$pointer ";
+       $symbol_len = $ret_type_len + 1 - $RETURN_TYPE_FIELD_WIDTH;
+    }
+
+    $symbol_len += length ($symbol);
+    my $char1 = my $char2 = my $char3 = "";
+    if ($symbol_type eq 'USER_FUNCTION') {
+       $symbol_len += 3;
+       $char1 = "(";
+       $char2 = "*";
+       $char3 = ")";
+    }
+
+    my ($symbol_output, $symbol_desc_output);
+    if ($symbol_len < $SYMBOL_FIELD_WIDTH) {
+       $symbol_output = "$char1<link linkend=\"$id\">$char2$symbol</link>$char3"
+           . (' ' x ($SYMBOL_FIELD_WIDTH - $symbol_len));
+       $symbol_desc_output = "$char1$char2$symbol$char3"
+           . (' ' x ($SYMBOL_FIELD_WIDTH - $symbol_len));
+    } else {
+       $symbol_output = "$char1<link linkend=\"$id\">$char2$symbol</link>$char3\n"
+           . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH));
+       $symbol_desc_output = "$char1$char2$symbol$char3\n"
+           . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH));
+    }
+
+    my $synop = $ret_type_output . $symbol_output . '(';
+    my $desc = "<refsect2>\n<title><anchor id=\"$id\">${symbol} ()</title>\n";
+    $desc  .= "<programlisting>${ret_type_output}$symbol_desc_output(";
+
+    my $param_num = 0;
+    while ($declaration ne "") {
+       if ($declaration =~ s/^[\s,]+//) {
+           # skip whitespace and commas
+           next;
+
+       } elsif ($declaration =~ s/^void\s*[,\n]//) {
+           $synop .= "void";
+           $desc  .= "void";
+
+       } elsif ($declaration =~ s/^...\s*[,\n]//) {
+           if ($param_num == 0) {
+               $synop .= "...";
+               $desc  .= "...";
+           } else {
+               $synop .= ",\n"
+                   . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH))
+                   . " ...";
+               $desc  .= ",\n"
+                   . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH))
+                   . " ...";
+           }
+
+           # allow alphanumerics, '_', '[' & ']' in param names
+       } elsif ($declaration =~ s/^(const\s+|unsigned\s+)*(struct\s+)?(\w+)\s*(\**)\s*(const\s+)?(\**)?\s*(\w+)?\s*(\[\d*\])?\s*[,\n]//) {
+           my $mod1 = defined($1) ? $1 : "";
+           if (defined($2)) { $mod1 .= $2; }
+           my $type = $3;
+           my $ptr1 = $4;
+           my $mod2 = defined($5) ? $5 : "";
+           my $ptr2 = $6;
+           my $name = defined($7) ? $7 : "";
+           if ($name) { $ptr1 = " " . $ptr1; }
+           my $array = defined($8) ? $8 : "";
+           my $xref = &MakeXRef ($type);
+
+#          print "Type: $mod1$type $ptr1 $mod2 $name $array\n";
+           if ($param_num == 0) {
+               $synop .= "$mod1$xref$ptr1$mod2$ptr2$name$array";
+               $desc  .= "$mod1$xref$ptr1$mod2$ptr2$name$array";
+           } else {
+               $synop .= ",\n"
+                   . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH))
+                   . " $mod1$xref$ptr1$mod2$ptr2$name$array";
+               $desc  .= ",\n"
+                   . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH))
+                   . " $mod1$xref$ptr1$mod2$ptr2$name$array";
+           }
+
+           # Try to match parameters which are functions.
+       } elsif ($declaration =~ s/^(const\s+|unsigned\s+)*(struct\s+)?(\w+)\s*(\**)\s*(const\s+)?\(\s*\*\s*(\w+)\s*\)\s*\(([^)]*)\)\s*[,\n]//) {
+           my $mod1 = defined($1) ? $1 : "";
+           if (defined($2)) { $mod1 .= $2; }
+           my $type = $3;
+           my $ptr1 = $4;
+           my $mod2 = defined($5) ? $5 : "";
+           my $name = $6;
+           my $func_params = $7;
+           my $xref = &MakeXRef ($type);
+
+#          print "Type: $mod1$type$ptr1$mod2(*$name)($func_params)\n";
+           if ($param_num == 0) {
+               $synop .= "$mod1$xref$ptr1$mod2 (*$name) ($func_params)";
+               $desc  .= "$mod1$xref$ptr1$mod2 (*$name) ($func_params)";
+           } else {
+               $synop .= ",\n"
+                   . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH))
+                   . " $mod1$xref$ptr1$mod2 (*$name) ($func_params)";
+               $desc  .= ",\n"
+                   . (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH))
+                   . " $mod1$xref$ptr1$mod2 (*$name) ($func_params)";
+           }
+
+       } else {
+           print "###Can't parse args for function $symbol: $declaration\n";
+           last;
+       }
+       $param_num++;
+    }
+    $synop .= ");\n";
+    $desc  .= ");</programlisting>\n";
+    if (defined ($SymbolDocs{$symbol})) {
+       $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+    }
+
+    $desc .= &OutputParamDescriptions ("FUNCTION", $symbol);
+    $desc .= "</refsect2>\n";
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : OutputParamDescriptions
+# Description : Returns the DocBook output describing the parameters of a
+#              function, macro or signal handler.
+# Arguments   : $symbol_type - 'FUNCTION', 'MACRO' or 'SIGNAL'. Signal
+#                handlers have an implicit user_data parameter last.
+#              $symbol - the name of the function/macro being described.
+#############################################################################
+
+sub OutputParamDescriptions {
+    my ($symbol_type, $symbol) = @_;
+    my $output = "";
+
+    if (defined ($SymbolParams{$symbol})) {
+       my $returns = "";
+       my $params = $SymbolParams{$symbol};
+       my $params_desc = "";
+       if ($#$params < 0) {
+           print "WARNING: 0 parameters\n";
+       }
+       my $j;
+       for ($j = 0; $j <= $#$params; $j += 2) {
+           my $param_name = $$params[$j];
+           my $param = $$params[$j + 1];
+           if ($param_name eq "Returns") {
+               $returns = &ExpandAbbreviations($param);
+           } else {
+               if ($param_name eq "Varargs") {
+                   $param_name = "...";
+               }
+               $param = &ExpandAbbreviations($param);
+               $params_desc .= "<row><entry align=\"right\"><parameter>$param_name</parameter>&nbsp;:</entry>\n<entry>$param</entry></row>\n";
+           }
+       }
+
+       # Signals have an implicit user_data parameter which we describe.
+       if ($symbol_type eq "SIGNAL") {
+           $params_desc .= "<row><entry align=\"right\"><parameter>user_data</parameter>&nbsp;:</entry>\n<entry>user data set when the signal handler was connected.</entry></row>\n";
+       }
+
+       # Start a table if we need one.
+       if ($params_desc || $returns) {
+           $output .= <<EOF;
+<informaltable pgwide=1 frame="none" role="params">
+<tgroup cols="2">
+<colspec colwidth="2*">
+<colspec colwidth="8*">
+<tbody>
+EOF
+
+           if ($params_desc ne "") {
+#              $output .= "<row><entry>Parameters:</entry></row>\n";
+               $output .= $params_desc;
+           }
+
+           # Output the returns info last.
+           if ($returns) {
+               $output .= "<row><entry align=\"right\"><emphasis>Returns</emphasis> :</entry><entry>$returns</entry></row>\n";
+           }
+
+           # Finish the table.
+           $output .= "</tbody></tgroup></informaltable>";
+       }
+    }
+    return $output;
+}
+
+
+#############################################################################
+# Function    : OutputSGMLFile
+# Description : Outputs the final DocBook file for one section.
+# Arguments   : $file - the name of the file.
+#              $title - the title from the $MODULE-sections.txt file, which
+#                will be overriden by the title in the template file.
+#              $section_id - the SGML id to use for the toplevel tag.
+#              $includes - comma-separates list of include files added at top
+#                of synopsis, with '<' '>' around them.
+#              $synopsis - reference to the DocBook for the Synopsis part.
+#              $details - reference to the DocBook for the Details part.
+#############################################################################
+
+sub OutputSGMLFile {
+    my ($file, $title, $section_id, $includes, $synopsis, $details) = @_;
+
+    # Find out if this is a GtkObject or descendant.
+    my $signals_synop = "";
+    my $signals_desc = "";
+    my $args_synop = "";
+    my $args_desc = "";
+    my $hierarchy = "";
+    if (&CheckIsObject ($title)) {
+       ($signals_synop, $signals_desc) = &GetSignals ($title);
+       ($args_synop, $args_desc) = &GetArgs ($title);
+       $hierarchy = &GetHierarchy ($title);
+    }
+
+    # The edited title overrides the one from the sections file.
+    my $new_title = $SymbolDocs{"$TMPL_DIR/$file:Title"};
+    if (defined ($new_title) && $new_title !~ m/^\s*$/) {
+       $title = $new_title;
+#      print "Found title: $title\n";
+    }
+    my $short_desc = $SymbolDocs{"$TMPL_DIR/$file:Short_Description"};
+    if (!defined ($short_desc) || $short_desc =~ m/^\s*$/) {
+#      $short_desc = "one line description goes here.";
+       $short_desc = "";
+    } else {
+       $short_desc = &ExpandAbbreviations($short_desc);
+#      print "Found short_desc: $short_desc";
+    }
+    my $long_desc = $SymbolDocs{"$TMPL_DIR/$file:Long_Description"};
+    if (!defined ($long_desc) || $long_desc =~ m/^\s*$/) {
+       $long_desc = "<para>\nA longer description goes here.\n</para>\n";
+    } else {
+       $long_desc = &ExpandAbbreviations($long_desc);
+#      print "Found long_desc: $long_desc";
+    }
+    my $see_also = $SymbolDocs{"$TMPL_DIR/$file:See_Also"};
+    if (!defined ($see_also) || $see_also =~ m%^\s*(<para>)?\s*(</para>)?\s*$%) {
+       $see_also = "";
+    } else {
+       $see_also = &ExpandAbbreviations($see_also);
+#      print "Found see_also: $see_also";
+    }
+    if ($see_also) {
+       $see_also = "<refsect1>\n<title>See Also</title>\n$see_also\n</refsect1>\n";
+    }
+
+    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
+       gmtime (time);
+    my $month = (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec))[$mon];
+    $year += 1900;
+
+    my $include_output = "";
+    my $include;
+    foreach $include (split (/,/, $includes)) {
+       $include_output .= "#include &lt;${include}&gt;\n";
+    }
+
+    open (OUTPUT, ">$SGML_OUTPUT_DIR/$file")
+       || die "Can't create $SGML_OUTPUT_DIR/$file";
+
+    # Note: The refname and refpurpose are on the same line to stop
+    # docbook-to-man 1.08 putting them on separate lines.
+    print OUTPUT <<EOF;
+<refentry id="$section_id" revision="$mday $month $year">
+<refmeta>
+<refentrytitle>$title</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>\U$MODULE\E Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>$title</refname><refpurpose>$short_desc</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv><title>Synopsis</title>
+<synopsis>
+
+$include_output
+
+$${synopsis}</synopsis>
+</refsynopsisdiv>
+
+$hierarchy
+$args_synop
+$signals_synop
+
+<refsect1>
+<title>Description</title>
+$long_desc
+</refsect1>
+
+<refsect1>
+<title>Details</title>
+$$details
+</refsect1>
+$args_desc
+$signals_desc
+
+$see_also
+</refentry>
+EOF
+    close (OUTPUT);
+}
+
+
+#############################################################################
+# Function    : OutputBook
+# Description : Outputs the SGML entities that need to be included into the
+#              main SGML file for the module.
+# Arguments   : $book_top - the declarations of the entities, which are added
+#                at the top of the main SGML file.
+#              $book_bottom - the references to the entities, which are
+#                added in the main SGML file at the desired position.
+#############################################################################
+
+sub OutputBook {
+    my ($book_top, $book_bottom) = @_;
+
+    open (OUTPUT, ">$SGML_OUTPUT_DIR/$MODULE-doc.top")
+       || die "Can't create $SGML_OUTPUT_DIR/$MODULE-doc.top";
+    print OUTPUT $book_top;
+    close (OUTPUT);
+
+    open (OUTPUT, ">$SGML_OUTPUT_DIR/$MODULE-doc.bottom")
+       || die "Can't create $SGML_OUTPUT_DIR/$MODULE-doc.bottom";
+    print OUTPUT $book_bottom;
+    close (OUTPUT);
+}
+
+
+#############################################################################
+# Function    : CreateValidSGMLID
+# Description : Creates a valid SGML 'id' from the given string.
+#              NOTE: SGML ids are case-insensitive, so we have a few special
+#                    cases to avoid clashes of ids.
+# Arguments   : $id - the string to be converted into a valid SGML id.
+#############################################################################
+
+sub CreateValidSGMLID {
+    my ($id) = $_[0];
+
+    # Append -CAPS to all all-caps identifiers
+
+    # Special case, '_' would end up as '' so we use 'gettext-macro' instead.
+    if ($id eq "_") { return "gettext-macro"; }
+
+    if ($id !~ /[a-z]/) { $id .= "-CAPS" };
+
+    $id =~ s/[_ ]/-/g;
+    $id =~ s/[,\.]//g;
+    $id =~ s/^-*//;
+    $id =~ s/::/-/g;
+
+    return $id;
+}
+
+
+#############################################################################
+# Function    : CreateValidSGML
+# Description : This turns any chars which are used in SGML into entities,
+#              e.g. '<' into '&lt;'
+# Arguments   : $text - the text to turn into proper SGML.
+#############################################################################
+
+sub CreateValidSGML {
+    my ($text) = @_;
+    $text =~ s/&/&amp;/g;      # Do this first, or the others get messed up.
+    $text =~ s/</&lt;/g;
+    $text =~ s/>/&gt;/g;
+    return $text;
+}
+
+
+#############################################################################
+# Function    : ExpandAbbreviations
+# Description : This turns the abbreviations function(), macro(), @param,
+#              %constant, and #symbol into appropriate DocBook markup.
+# Arguments   : $text - the text to expand.
+#############################################################################
+
+sub ExpandAbbreviations {
+    my ($text) = @_;
+
+    # Convert 'function()' or 'macro()'
+    $text =~ s/(\w+)\s*\(\)/&MakeXRef($1) . "()";/eg;
+
+    # Convert '@param'
+    $text =~ s/\@(\w+)/<parameter>$1<\/parameter>/g;
+
+    # Convert '%constant'. Also allow negative numbers, e.g. %-1.
+    $text =~ s/\%(-?\w+)/<literal>$1<\/literal>/g;
+
+    # Convert '#symbol'
+    $text =~ s/#([\w-]+)/&MakeXRef($1);/eg;
+
+    return $text;
+}
+
+
+#############################################################################
+# Function    : MakeXRef
+# Description : This returns a cross-reference link to the given symbol.
+#              Though it doesn't try to do this for a few standard C types
+#              that it knows won't be in the documentation.
+# Arguments   : $symbol - the symbol to try to create a XRef to.
+#############################################################################
+
+sub MakeXRef {
+    my ($symbol) = $_[0];
+#    print "Getting type link for $symbol\n";
+
+    # Don't create a link for some standard C types and functions, to cut
+    # down on the number of warnings output by jade.
+    if ($symbol eq "void" || $symbol eq "va_list" || $symbol eq "int"
+       || $symbol eq "char" || $symbol eq "printf" || $symbol eq "sprintf") {
+       return $symbol;
+    }
+
+    my $symbol_id = &CreateValidSGMLID ($symbol);
+    # Get rid of special '-struct' suffix.
+    $symbol =~ s/-struct$//;
+    return "<link linkend=\"$symbol_id\">$symbol</link>";
+}
+
+
+#############################################################################
+# Function    : GetHierarchy
+# Description : Returns the DocBook output describing the ancestors of a
+#              GtkObject subclass. It uses the global @Objects and
+#              @ObjectLevels arrays to walk up the tree.
+# Arguments   : $object - the GtkObject subclass.
+#############################################################################
+
+sub GetHierarchy {
+    my ($object) = @_;
+
+    # Find object in the objects array.
+    my $found = 0;
+    my $i;
+    for ($i = 0; $i < @Objects; $i++) {
+       if ($Objects[$i] eq $object) {
+           $found = 1;
+           last;
+       }
+    }
+    if (!$found) {
+       return "";
+    }
+
+    # Walk up the hierarchy, pushing ancestors onto the ancestors array.
+    my @ancestors = ();
+    push (@ancestors, $object);
+    my $level = $ObjectLevels[$i];
+#    print "Level: $level\n";
+    while ($level > 1) {
+       $i--;
+       if ($ObjectLevels[$i] < $level) {
+           push (@ancestors, $Objects[$i]);
+           $level = $ObjectLevels[$i];
+#          print "Level: $level\n";
+       }
+    }
+
+    # Output the ancestors list, indented and with links.
+    my $hierarchy = "<synopsis>\n\n";
+    $level = 0;
+    for ($i = $#ancestors; $i >= 0; $i--) {
+       my $link_text;
+       # Don't add a link to the current widget, i.e. when i == 0.
+       if ($i > 0) {
+           my $ancestor_id = &CreateValidSGMLID ($ancestors[$i]);
+           $link_text = "<link linkend=\"$ancestor_id\">$ancestors[$i]</link>";
+       } else {
+           $link_text = "$ancestors[$i]";
+       }
+       if ($level == 0) {
+           $hierarchy .= "  $link_text\n";
+       } else {
+#          $hierarchy .= ' ' x ($level * 6 - 3) . "|\n";
+           $hierarchy .= ' ' x ($level * 6 - 3) . "+----$link_text\n";
+       }
+       $level++;
+    }
+    $hierarchy .= "</synopsis>\n";
+
+    return <<EOF;
+<refsect1>
+<title>Object Hierarchy</title>
+$hierarchy
+</refsect1>
+EOF
+}
+
+
+#############################################################################
+# Function    : GetSignals
+# Description : Returns the synopsis and detailed description DocBook output
+#              for the signal handlers of a given GtkObject subclass.
+# Arguments   : $object - the GtkObject subclass, e.g. 'GtkButton'.
+#############################################################################
+
+sub GetSignals {
+    my ($object) = @_;
+    my $synop = "";
+    my $desc = "";
+
+    my $i;
+    for ($i = 0; $i <= $#SignalObjects; $i++) {
+       if ($SignalObjects[$i] eq $object) {
+#          print "Found signal: $SignalNames[$i]\n";
+           my $name = $SignalNames[$i];
+           my $symbol = "${object}::${name}";
+           my $id = &CreateValidSGMLID ("$object-$name");
+
+           my $name_len = length ($name) + 2;
+           if ($name_len < $SIGNAL_FIELD_WIDTH) {
+               $synop .= "&quot;<link linkend=\"$id\">$name</link>&quot;"
+                   . (' ' x ($SIGNAL_FIELD_WIDTH - $name_len));
+           } else {
+               $synop .= "&quot;<link linkend=\"$id\">$name</link>&quot;\n"
+                   . (' ' x $SIGNAL_FIELD_WIDTH);
+           }
+
+           $desc .= "<refsect2><title><anchor id=\"$id\">The &quot;$name&quot; signal</title>\n";
+           $desc .= "<programlisting>";
+
+           $SignalReturns[$i] =~ m/\s*(const\s*)?(\w+)\s*(\**)/;
+           my $type_modifier = defined($1) ? $1 : "";
+           my $type = $2;
+           my $pointer = $3;
+           my $xref = &MakeXRef ($type);
+
+           my $ret_type_len = length ($type_modifier) + length ($pointer)
+               + length ($type);
+           my $ret_type_output = "$type_modifier$xref$pointer"
+               . (' ' x ($RETURN_TYPE_FIELD_WIDTH - $ret_type_len));
+
+           $synop .= "${ret_type_output}user_function      (";
+           $desc  .= "${ret_type_output}user_function                  (";
+
+           my @params = split ("\n", $SignalPrototypes[$i]);
+           my $j;
+           for ($j = 0; $j <= $#params; $j++) {
+               # allow alphanumerics, '_', '[' & ']' in param names
+               if ($params[$j] =~ m/^\s*(\w+)\s*(\**)\s*([\w\[\]]+)\s*$/) {
+                   $type = $1;
+                   $pointer = $2;
+                   $name = $3;
+                   $xref = &MakeXRef ($type);
+                   $synop .= "$xref $pointer$name,\n";
+                   $synop .= (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH));
+                   $desc .= "$xref $pointer$name,\n";
+                   $desc .= (' ' x ($SYMBOL_FIELD_WIDTH + $RETURN_TYPE_FIELD_WIDTH));
+               } else {
+                   print "###Can't parse arg: $params[$j]\nArgs:$SignalPrototypes[$i]\n";
+               }
+           }
+           $xref = &MakeXRef ("gpointer");
+           $synop .= "$xref user_data);\n";
+           $desc  .= "$xref user_data);</programlisting>\n";
+
+           if (defined ($SymbolDocs{$symbol})) {
+               $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+           }
+
+           $desc .= &OutputParamDescriptions ("SIGNAL", $symbol);
+           $desc .= "</refsect2>";
+       }
+    }
+    if ($synop ne '') {
+        $synop = <<EOF;
+<refsect1>
+<title>Signal Prototypes</title>
+<synopsis>
+
+${synop}</synopsis>
+</refsect1>
+EOF
+       $desc  = <<EOF;
+<refsect1>
+<title>Signals</title>
+$desc
+</refsect1>
+EOF
+    }
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : GetArgs
+# Description : Returns the synopsis and detailed description DocBook output
+#              for the Args of a given GtkObject subclass.
+# Arguments   : $object - the GtkObject subclass, e.g. 'GtkButton'.
+#############################################################################
+
+sub GetArgs {
+    my ($object) = @_;
+    my $synop = "";
+    my $desc = "";
+
+    my $i;
+    for ($i = 0; $i <= $#ArgObjects; $i++) {
+       if ($ArgObjects[$i] eq $object) {
+#          print "Found arg: $ArgNames[$i]\n";
+           my $name = $ArgNames[$i];
+           # Remember only one colon so we don't clash with signals.
+           my $symbol = "${object}:${name}";
+           # I've used two dashes here for the same reason.
+           my $id = &CreateValidSGMLID ("$object--$name");
+
+           my $type = $ArgTypes[$i];
+           my $type_output;
+
+           if ($type eq "GtkSignal") {
+               $type = "GtkSignalFunc, gpointer";
+               $type_output = &MakeXRef ("GtkSignalFunc") . ", "
+                   . &MakeXRef ("gpointer");
+           } elsif ($type eq "GtkString") {
+               $type = "gchar*";
+               $type_output = &MakeXRef ("gchar") . "*";
+           } else {
+               $type_output = &MakeXRef ($type);
+           }
+
+           my $flags = $ArgFlags[$i];
+           my $flags_string = "";
+
+           if ($flags =~ m/r/) {
+               $flags_string = "Read";
+           }
+           if ($flags =~ m/w/) {
+               if ($flags_string) { $flags_string .= " / "; }
+               $flags_string .= "Write";
+           }
+           if ($flags =~ m/x/) {
+               if ($flags_string) { $flags_string .= " / "; }
+               $flags_string .= "Construct";
+           }
+           if ($flags =~ m/X/) {
+               if ($flags_string) { $flags_string .= " / "; }
+               $flags_string .= "Construct Only";
+           }
+           if ($flags =~ m/c/) {
+               if ($flags_string) { $flags_string .= " / "; }
+               $flags_string .= "Child";
+           }
+
+           my $pad1 = " " x (20 - length ($name));
+           my $pad2 = " " x (20 - length ($type));
+           $synop .= "  &quot;<link linkend=\"$id\">$name</link>&quot;$pad1 $type_output$pad2 : $flags_string\n";
+
+           $desc .= "<varlistentry><term><anchor id=\"$id\">&quot;<literal>$name</literal>&quot; ($type_output : $flags_string)</term>\n<listitem>\n";
+
+           if (defined ($SymbolDocs{$symbol})) {
+               $desc .= &ExpandAbbreviations($SymbolDocs{$symbol});
+           } else {
+               $desc .= "<para></para>\n";
+           }
+
+           $desc .= "</listitem></varlistentry>\n";
+       }
+    }
+    if ($synop ne '') {
+        $synop = <<EOF;
+<refsect1>
+<title>Args</title>
+<synopsis>
+
+${synop}</synopsis>
+</refsect1>
+EOF
+       $desc  = <<EOF;
+<refsect1>
+<title>Args</title>
+<variablelist>
+$desc
+</variablelist>
+</refsect1>
+EOF
+    }
+    return ($synop, $desc);
+}
+
+
+#############################################################################
+# Function    : ReadSourceDocumentation
+# Description : This reads in the documentation embedded in comment blocks
+#              in the source code (for Gnome).
+#              
+#              Parameter descriptions override any in the template files.
+#              Function descriptions are placed before any description from
+#              the template files.
+#
+#              It recursively descends the source directory looking for .c
+#              files and scans them looking for specially-formatted comment
+#              blocks.
+#
+# Arguments   : $source_dir - the directory to scan.
+#############################################################################
+
+sub ReadSourceDocumentation {
+    my ($source_dir) = @_;
+#    print "Scanning source directory: $source_dir\n";
+
+    # This array holds any subdirectories found.
+    my (@subdirs) = ();
+    
+    opendir (SRCDIR, $source_dir)
+       || die "Can't open source directory $source_dir: $!";
+    my $file;
+    foreach $file (readdir (SRCDIR)) {
+       if ($file =~ /^\./) {
+           next;
+       } elsif (-d "$source_dir/$file") {
+           push (@subdirs, $file);
+       } elsif ($file =~ m/\.c$/) {
+           &ScanSourceFile ("$source_dir/$file");
+       }
+    }
+    closedir (SRCDIR);
+
+    # Now recursively scan the subdirectories.
+    my $dir;
+    foreach $dir (@subdirs) {
+       &ReadSourceDocumentation ("$source_dir/$dir");
+    }
+}
+
+
+#############################################################################
+# Function    : ScanSourceFile
+# Description : Scans one source file looking for specially-formatted comment
+#              blocks. It calls &MergeSourceDocumentation to merge any
+#              documentation found with the documentation already read in
+#              from the template files.
+#              
+# Arguments   : $file - the file to scan.
+#############################################################################
+
+sub ScanSourceFile {
+    my ($file) = @_;
+
+#    print "Scanning source file: $file\n";
+
+    open (SRCFILE, $file)
+       || die "Can't open $file: $!";
+    my $in_comment_block = 0;
+    my $symbol;
+    my ($in_description, $in_return);
+    my ($description, $return_desc, $return_start);
+    my $current_param;
+    my @params;
+    while (<SRCFILE>) {
+       # Look for the start of a comment block.
+       if (!$in_comment_block) {
+           if (m%^\s*/\*\*\s%) {
+#              print "Found comment block start\n";
+               $in_comment_block = 1;
+
+               # Reset all the symbol data.
+               $symbol = "";
+               $in_description = 0;
+               $in_return = 0;
+               $description = "";
+               $return_desc = "";
+               $current_param = -1;
+               @params = ();
+           }
+           next;
+       }
+
+       # We're in a comment block. Check if we've found the end of it.
+       if (m%^\s*\*+/%) {
+#          print "Found comment block end: $symbol\n";
+           if (!$symbol) {
+               print <<EOF;
+WARNING: symbol name not found in comment block.
+ $file line $.
+EOF
+           } else {
+               # Add the return value description onto the end of the params.
+               if ($return_desc) {
+                   push (@params, "Returns");
+                   push (@params, $return_desc);
+               }
+               $SourceSymbolDocs{$symbol} = $description;
+               $SourceSymbolParams{$symbol} = [ @params ];
+           }
+
+           $in_comment_block = 0;
+           next;
+       }
+
+       # Get rid of ' * ' at start of every line in the comment block.
+       s%^\s*\*\s*%%;
+       # But make sure we don't get rid of the newline at the end.
+       if (!$_) {
+           $_ = "\n";
+       }
+
+       # If we haven't found the symbol name yet, look for it.
+       if (!$symbol) {
+           if (m%^(\w+)\s*:?%) {
+               $symbol = $1;
+           }
+           next;
+       }
+
+       # If we're in the return value description, add it to the end.
+       if ($in_return) {
+           # If we find another valid returns line, we assume that the first
+           # one was really part of the description.
+           if (m%^(returns:|return\s+value:|returns\s*)%i) {
+               $description .= $return_start . $return_desc;
+               $return_start = $1;
+               $return_desc = $';
+           } else {
+               $return_desc .= $_;
+           }
+           next;
+       }
+
+       # If we're in the description part, check for the 'Return' line.
+       # If that isn't found, add the text to the end.
+       if ($in_description) {
+           # Get rid of 'Description:'
+           s%^Description:%%;
+
+           if (m%^(returns:|return\s+value:|returns\s*)%i) {
+#              print "RETURNS: $_";
+               $return_start = $1;
+               $return_desc = $';
+               $in_return = 1;
+               next;
+           }
+
+           $description .= $_;
+           next;
+       }
+
+       # We must be in the parameters. Check for the empty line at the end.
+       if (m%^$%) {
+           $in_description = 1;
+           next;
+       }
+
+       # Look for a parameter name.
+       if (m%^@(\S+)\s*:%) {
+           my $param_name = $1;
+#          print "Found parameter: $param_name\n";
+           # Allow '...' as the Varargs parameter.
+           if ($param_name eq "...") {
+               $param_name = "Varargs";
+           }
+           push (@params, $param_name);
+           push (@params, $');
+           $current_param += 2;
+           next;
+       }
+
+       # We must be in the middle of a parameter description, so add it on
+       # to the last element in @params.
+       if ($current_param == -1) {
+           print <<EOF
+ERROR parsing comment block file : parameter expected -
+ $file:$.
+EOF
+       } else {
+           $params[$#params] .= $_;
+       }
+    }
+    close (SRCFILE);
+}
+
+
+#############################################################################
+# Function    : MergeSourceDocumentation
+# Description : This merges documentation read from a source file into the
+#              documentation read in from a template file.
+#              
+#              Parameter descriptions override any in the template files.
+#              Function descriptions are placed before any description from
+#              the template files.
+#
+# Arguments   : none
+#############################################################################
+
+sub MergeSourceDocumentation {
+    my $symbol;
+    foreach $symbol (keys (%SymbolDocs)) {
+       if (exists ($SourceSymbolDocs{$symbol})) {
+           my $src_doc = $SourceSymbolDocs{$symbol};
+           my $tmpl_doc = $SymbolDocs{$symbol};
+           $tmpl_doc = defined ($tmpl_doc) ? $tmpl_doc : "";
+           $src_doc =~ s/^\s+//;
+           $src_doc =~ s/\s+$//;
+
+           # Convert special SGML characters. I'm not sure if we want to do
+           # this but currently there are a couple of '&'s in the source code
+           # comment blocks which mess up the HTML output badly.
+           $src_doc = &CreateValidSGML ($src_doc);
+
+           # If there is a blank line, finish the paragraph and start another.
+           if ($src_doc =~ s%\n{2,}%\n</para>\n<para>\n%g) {
+#              print "Converted blank lines:\n$src_doc\n";
+           }
+           $SymbolDocs{$symbol} = "<para>\n$src_doc</para>\n$tmpl_doc";
+
+           # The templates contain the definitive parameter names and order,
+           # so we will not change that. We only override the actual text.
+           my $tmpl_params = $SymbolParams{$symbol};
+           if (!defined ($tmpl_params)) {
+               next;
+           }
+
+           my $params = $SourceSymbolParams{$symbol};
+           my $j;
+           for ($j = 0; $j <= $#$tmpl_params; $j += 2) {
+               my $tmpl_param_name = $$tmpl_params[$j];
+               my $tmpl_param_desc = $$tmpl_params[$j + 1];
+
+               # Try to find the param in the source comment documentation.
+               my $found = 0;
+               my $k;
+               for ($k = 0; $k <= $#$params; $k += 2) {
+                   my $param_name = $$params[$k];
+                   my $param_desc = $$params[$k + 1];
+
+                   # We accept changed in case, since the Gnome source docs
+                   # contain a lot of these.
+                   if ("\L$param_name" eq "\L$tmpl_param_name") {
+                       $found = 1;
+
+                       # Override the description.
+                       $$tmpl_params[$j + 1] = &CreateValidSGML ($param_desc);
+
+                       # Set the name to "" to mark it as used.
+                       $$params[$k] = "";
+                       last;
+                   }
+               }
+
+               # Output a warning if the parameter is not found.
+               if (!$found) {
+                   print <<EOF;
+WARNING: Parameter description missing in source code comment block -
+         Func: $symbol Param: $tmpl_param_name.
+EOF
+               }
+           }
+
+           # Now we output a warning if parameters have been described which
+           # do not exist.
+           for ($j = 0; $j <= $#$params; $j += 2) {
+               my $param_name = $$params[$j];
+               if ($param_name) {
+                   print <<EOF;
+WARNING: Parameter described in source code comment block but does not exist -
+         Func: $symbol Param: $param_name.
+EOF
+               }
+           }
+       }
+    }
+}
+
+
+#############################################################################
+# LIBRARY FUNCTIONS -  These functions are used in both gtkdoc-mkdb and
+#                      gtkdoc-mktmpl and should eventually be moved to a
+#                      separate library.
+#############################################################################
+
+#############################################################################
+# Function    : ReadDeclarationsFile
+# Description : This reads in a file containing the function/macro/enum etc.
+#              declarations.
+#              
+#              Note that in some cases there are several declarations with
+#              the same name, e.g. for conditional macros. In this case we
+#              set a flag in the %DeclarationConditional hash so the
+#              declaration is not shown in the docs.
+#
+#              If a macro and a function have the same name, e.g. for
+#              gtk_object_ref, the function declaration takes precedence.
+#
+#              Some opaque structs are just declared with 'typedef struct
+#              _name name;' in which case the declaration may be empty.
+#              The structure may have been found later in the header, so
+#              that overrides the empty declaration.
+#              
+# Arguments   : $file - the declarations file to read
+#              $override - if declarations in this file should override
+#                      any current declaration.
+#############################################################################
+
+sub ReadDeclarationsFile {
+    my ($file, $override) = @_;
+
+    if ($override == 0) {
+       %Declarations = ();
+       %DeclarationTypes = ();
+       %DeclarationConditional = ();
+       %DeclarationOutput = ();
+    }
+
+    open (INPUT, $file)
+       || die "Can't open $file";
+    my $declaration_type = "";
+    my $declaration_name;
+    my $declaration;
+    while (<INPUT>) {
+       if (!$declaration_type) {
+           if (m/^<([^>]+)>/) {
+               $declaration_type = $1;
+               $declaration_name = "";
+#              print "Found declaration: $declaration_type\n";
+               $declaration = "";
+           }
+       } else {
+           if (m%^<NAME>(.*)</NAME>%) {
+               $declaration_name = $1;
+           } elsif (m%^</$declaration_type>%) {
+#              print "Found end of declaration: $declaration_name\n";
+               # Check that the declaration has a name
+               if ($declaration_name eq "") {
+                   print "ERROR: $declaration_type has no name $file:$.\n";
+               }
+
+               # Check if the symbol is already defined.
+               if (defined ($Declarations{$declaration_name})
+                   && $override == 0) {
+                   # Function declarations take precedence.
+                   if ($DeclarationTypes{$declaration_name} eq 'FUNCTION') {
+                       # Ignore it.
+                   } elsif ($declaration_type eq 'FUNCTION') {
+                       $Declarations{$declaration_name} = $declaration;
+                       $DeclarationTypes{$declaration_name} = $declaration_type;
+                   } elsif ($DeclarationTypes{$declaration_name}
+                             eq $declaration_type) {
+                       # If the existing declaration is empty override it.
+                       if ($declaration_type eq 'STRUCT') {
+                           if ($Declarations{$declaration_name} =~ m/^\s*$/) {
+                               $Declarations{$declaration_name} = $declaration;
+                           } elsif ($declaration =~ m/^\s*$/) {
+                               # Ignore an empty declaration.
+                           } else {
+                               print "WARNING: Structure has multiple definitions: $declaration_name\n";
+                           }
+
+                       } else {
+                           # set flag in %DeclarationConditional hash for
+                           # multiply defined macros/typedefs.
+                           $DeclarationConditional{$declaration_name} = 1;
+                       }
+                   } else {
+                       print "ERROR: $declaration_name has multiple definitions\n";
+                   }
+               } else {
+                   $Declarations{$declaration_name} = $declaration;
+                   $DeclarationTypes{$declaration_name} = $declaration_type;
+               }
+               $declaration_type = "";
+           } else {
+               $declaration .= $_;
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : ReadSignalsFile
+# Description : This reads in an existing file which contains information on
+#              all GTK signals. It creates the arrays @SignalNames and
+#              @SignalPrototypes containing info on the signals. The first
+#              line of the SignalPrototype is the return type of the signal
+#              handler. The remaining lines are the parameters passed to it.
+#              The last parameter, "gpointer user_data" is always the same
+#              so is not included.
+# Arguments   : $file - the file containing the signal handler prototype
+#                      information.
+#############################################################################
+
+sub ReadSignalsFile {
+    my ($file) = @_;
+
+    my $in_signal = 0;
+    my $signal_object;
+    my $signal_name;
+    my $signal_returns;
+    my $signal_prototype;
+
+    # Reset the signal info.
+    @SignalObjects = ();
+    @SignalNames = ();
+    @SignalReturns = ();
+    @SignalPrototypes = ();
+
+    if (! -f $file) {
+       return;
+    }
+    if (!open (INPUT, $file)) {
+       warn "Can't open $file - skipping signals\n";
+       return;
+    }
+    while (<INPUT>) {
+       if (!$in_signal) {
+           if (m/^<SIGNAL>/) {
+               $in_signal = 1;
+               $signal_object = "";
+               $signal_name = "";
+               $signal_returns = "";
+               $signal_prototype = "";
+           }
+       } else {
+           if (m/^<NAME>(.*)<\/NAME>/) {
+               $signal_name = $1;
+               if ($signal_name =~ m/^(.*)::(.*)$/) {
+                   $signal_object = $1;
+                   $signal_name = $2;
+#                  print "Found signal: $signal_name\n";
+               } else {
+                   print "Invalid signal name: $signal_name\n";
+               }
+           } elsif (m/^<RETURNS>(.*)<\/RETURNS>/) {
+               $signal_returns = $1;
+           } elsif (m%^</SIGNAL>%) {
+#              print "Found end of signal: ${signal_object}::${signal_name}\nReturns: ${signal_returns}\n${signal_prototype}";
+               push (@SignalObjects, $signal_object);
+               push (@SignalNames, $signal_name);
+               push (@SignalReturns, $signal_returns);
+               push (@SignalPrototypes, $signal_prototype);
+               $in_signal = 0;
+           } else {
+               $signal_prototype .= $_;
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : ReadTemplateFile
+# Description : This reads in the manually-edited documentation file
+#              corresponding to the file currently being created, so we can
+#              insert the documentation at the appropriate places.
+#              It outputs %SymbolTypes, %SymbolDocs and %SymbolParams, which
+#              is a hash of arrays.
+#              NOTE: This function is duplicated in gtkdoc-mkdb (but
+#              slightly different).
+# Arguments   : $docsfile - the template file to read in.
+#              $skip_unused_params - 1 if the unused parameters should be
+#                      skipped.
+#############################################################################
+
+sub ReadTemplateFile {
+    my ($docsfile, $skip_unused_params) = @_;
+
+#    print "Reading $docsfile\n";
+    if (! -f $docsfile) {
+       print "File doesn't exist: $docsfile\n";
+       return; 
+    }
+
+    my $current_type = "";     # Type of symbol being read.
+    my $current_symbol = "";   # Name of symbol being read.
+    my $symbol_doc = "";               # Description of symbol being read.
+    my @params;                        # Parameter names and descriptions of current
+                               #   function/macro/function typedef.
+    my $current_param = -1;    # Index of parameter currently being read.
+                               #   Note that the param array contains pairs
+                               #   of param name & description.
+    my $in_unused_params = 0;  # True if we are reading in the unused params.
+
+    open (DOCS, $docsfile)
+       || die "Can't open file $docsfile: $!";
+    while (<DOCS>) {
+       if (m/^<!-- ##### ([A-Z_]+) (\S+) ##### -->/) {
+           my $type = $1;
+           my $symbol = $2;
+           if ($symbol eq "Title"
+               || $symbol eq "Short_Description"
+               || $symbol eq "Long_Description"
+               || $symbol eq "See_Also") {
+               $symbol = $docsfile . ":" . $symbol;
+#              print "Found symbol: $symbol\n";
+           }
+
+           # Store previous symbol, but remove any trailing blank lines.
+           if ($current_symbol ne "") {
+               $symbol_doc =~ s/\s+$//;
+               $SymbolTypes{$current_symbol} = $current_type;
+               $SymbolDocs{$current_symbol} = $symbol_doc;
+               if ($current_param >= 0) {
+                   $SymbolParams{$current_symbol} = [ @params ];
+               } else {
+                   # Delete any existing params in case we are overriding a
+                   # previously read template.
+                   delete $SymbolParams{$current_symbol};
+               }
+           }
+           $current_type = $type;
+           $current_symbol = $symbol;
+           $current_param = -1;
+           $in_unused_params = 0;
+           $symbol_doc = "";
+           @params = ();
+
+       } elsif (m/^<!-- # Unused Parameters # -->/) {
+#          print "DEBUG: Found unused parameters\n";
+           $in_unused_params = 1;
+           next;
+
+       } elsif ($in_unused_params && $skip_unused_params) {
+           # When outputting the DocBook we skip unused parameters.
+#          print "DEBUG: Skipping unused param: $_";
+           next;
+
+       } else {
+           # Check if param found
+           if (s/^\@(\S+):\s*//) {
+               my $param_name = $1;
+               # Allow variations of 'Returns'
+               if ($param_name =~ m/^[Rr]eturns?$/) {
+                   $param_name = "Returns";
+               }
+#              print "Found param: $param_name\n";
+               push (@params, $param_name);
+               push (@params, $_);
+               $current_param += 2;
+               next;
+           }
+
+           if ($current_param >= 0) {
+               $params[$current_param] .= $_;
+           } else {
+               $symbol_doc .= $_;
+           }
+       }
+    }
+
+    # Remember to finish the current symbol doccs.
+    if ($current_symbol ne "") {
+       $symbol_doc =~ s/\s+$//;
+       $SymbolTypes{$current_symbol} = $current_type;
+       $SymbolDocs{$current_symbol} = $symbol_doc;
+       if ($current_param >= 0) {
+           $SymbolParams{$current_symbol} = [ @params ];
+       } else {
+           delete $SymbolParams{$current_symbol};
+       }
+    }
+
+    close (DOCS);
+}
+
+
+#############################################################################
+# Function    : ReadObjectHierarchy
+# Description : This reads in the $MODULE-hierarchy.txt file containing all
+#              the GtkObject subclasses described in this module (and their
+#              ancestors).
+#              It places them in the @Objects array, and places their level
+#              in the widget hierarchy in the @ObjectLevels array, at the
+#              same index. GtkObject, the root object, has a level of 1.
+#   
+#               FIXME: the version in gtkdoc-mkdb also generates tree_index.sgml
+#               as it goes along, this should be split out into a separate
+#               function.
+# 
+# Arguments   : none
+#############################################################################
+
+sub ReadObjectHierarchy {
+    @Objects = ();
+    @ObjectLevels = ();
+
+    if (! -f $OBJECT_TREE_FILE) {
+       return;
+    }
+    if (!open (INPUT, $OBJECT_TREE_FILE)) {
+       warn "Can't open $OBJECT_TREE_FILE - skipping object tree\n";
+       return;
+    }
+    open (OUTPUT, ">$SGML_OUTPUT_DIR/tree_index.sgml")
+       || die "Can't create $SGML_OUTPUT_DIR/tree_index.sgml";
+    print (OUTPUT "<literallayout>\n");
+
+    while (<INPUT>) {
+        if (m/\S+/) {
+           my $object = $&;
+           my $level = (length($`)) / 2 + 1;
+#            print ("Level: $level  Object: $object\n");
+
+           my $xref = &MakeXRef ($object);
+           print (OUTPUT ' ' x ($level * 4), "$xref\n");
+           push (@Objects, $object);
+           push (@ObjectLevels, $level);
+        }
+    }
+    print (OUTPUT "</literallayout>\n");
+
+    close (INPUT);
+    close (OUTPUT);
+
+    &OutputObjectList;
+}
+
+
+#############################################################################
+# Function    : ReadArgsFile
+# Description : This reads in an existing file which contains information on
+#              all GTK args. It creates the arrays @ArgObjects, @ArgNames,
+#              @ArgTypes and @ArgFlags containing info on the args.
+# Arguments   : $file - the file containing the arg information.
+#############################################################################
+
+sub ReadArgsFile {
+    my ($file) = @_;
+
+    my $in_arg = 0;
+    my $arg_object;
+    my $arg_name;
+    my $arg_type;
+    my $arg_flags;
+
+    # Reset the signal info.
+    @ArgObjects = ();
+    @ArgNames = ();
+    @ArgTypes = ();
+    @ArgFlags = ();
+
+    if (! -f $file) {
+       return;
+    }
+    if (!open (INPUT, $file)) {
+       warn "Can't open $file - skipping args\n";
+       return;
+    }
+    while (<INPUT>) {
+       if (!$in_arg) {
+           if (m/^<ARG>/) {
+               $in_arg = 1;
+               $arg_object = "";
+               $arg_name = "";
+               $arg_type = "";
+               $arg_flags = "";
+           }
+       } else {
+           if (m/^<NAME>(.*)<\/NAME>/) {
+               $arg_name = $1;
+               if ($arg_name =~ m/^(.*)::(.*)$/) {
+                   $arg_object = $1;
+                   $arg_name = $2;
+#                  print "Found arg: $arg_name\n";
+               } else {
+                   print "Invalid arg name: $arg_name\n";
+               }
+           } elsif (m/^<TYPE>(.*)<\/TYPE>/) {
+               $arg_type = $1;
+           } elsif (m/^<FLAGS>(.*)<\/FLAGS>/) {
+               $arg_flags = $1;
+           } elsif (m%^</ARG>%) {
+#              print "Found end of arg: ${arg_object}::${arg_name}\n${arg_type} : ${arg_flags}\n";
+               push (@ArgObjects, $arg_object);
+               push (@ArgNames, $arg_name);
+               push (@ArgTypes, $arg_type);
+               push (@ArgFlags, $arg_flags);
+               $in_arg = 0;
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : CheckIsObject
+# Description : Returns 1 if the given name is a GtkObject or a subclass.
+#              It uses the global @Objects array.
+#              Note that the @Objects array only contains classes in the
+#              current module and their ancestors - not all GTK classes.
+# Arguments   : $name - the name to check.
+#############################################################################
+
+sub CheckIsObject {
+    my ($name) = @_;
+
+    my $object;
+    foreach $object (@Objects) {
+       if ($object eq $name) {
+           return 1;
+       }
+    }
+    return 0;
+}
+
+
+#############################################################################
+# Function    : ParseStructDeclaration
+# Description : This function takes a structure declaration and
+#               breaks it into individual type declarations.
+# Arguments   : $declaration - the declaration to parse
+#               $is_object - true if this is an object structure
+#               $typefunc - function reference to apply to type
+#               $namefunc - function reference to apply to name
+#############################################################################
+
+sub ParseStructDeclaration {
+    my ($declaration, $is_object, $typefunc, $namefunc) = @_;
+
+    # Remove all private parts of the declaration
+
+    # For objects, assume private
+    if ($is_object) {
+       $declaration =~ s!(struct\s+\w*\s*\{)
+                         .*?
+                         (?:/\*\s*<\s*public\s*>\s*\*/|(?=\}))!$1!msgx;
+    }
+    
+    $declaration =~ s!\n?[ \t]*/\*\s*<\s*private\s*>\s*\*/
+                     .*?
+                     (?:/\*\s*<\s*public\s*>\s*\*/|(?=\}))!!msgx;
+    
+    # Remove all other comments;
+    $declaration =~ s@/\*([^*]+|\*(?!/))*\*/@ @g;
+
+    my @result = ();
+
+    if ($declaration =~ /^\s*$/) {
+       return @result;
+    }
+
+    # Prime match after "struct {" declaration
+    if (!scalar($declaration =~ m/struct\s+\w*\s*\{/msg)) {
+       die "Structure declaration '$declaration' does not begin with struct [NAME] {\n";
+    }
+
+    # Treat lines in sequence, allowing singly nested anonymous structs
+    # and unions.
+    while ($declaration =~ m/\s*([^{;]+(\{[^\}]*\}[^{;]+)?);/msg) {
+       my $line = $1;
+       
+       last if $line =~ /^\s*\}\s*\w*\s*$/;
+
+       # FIXME: Just ignore nested structs and unions for now
+       next if $line =~ /{/;
+
+       # FIXME: The regexes here are the same as in OutputFunction; 
+       #        this functionality should be separated out.
+
+       if ($line =~ m/^
+           (const\s+|unsigned\s+)*(struct\s+)? # mod1
+           (\w+)\s*                            # type
+           (\**)\s*                            # ptr1
+           (const\s+)?                         # mod2
+           (\**)?\s*                           # ptr2
+           (\w+(?:\s*,\s*\w+)*)\s*             # name
+           (?:((?:\[[^\]]*\]\s*)+) |           # array
+              (:\s*\d+))?\s*                   # bits
+                      $/x) {
+           my $mod1 = defined($1) ? $1 : "";
+           if (defined($2)) { $mod1 .= $2; }
+           my $type = $3;
+           my $ptr1 = $4;
+           my $mod2 = defined($5) ? $5 : "";
+           my $ptr2 = $6;
+           my $name = $7;
+           $ptr1 = " " . $ptr1;
+           my $array = defined($8) ? $8 : "";
+           my $bits =  defined($9) ? " $9" : "";
+           my $ptype = defined $typefunc ? $typefunc->($type) : $type;
+           
+           # FIXME:
+           # As a hack, we allow the "name" to be of the form
+           # "a, b, c". This isn't the correct C syntax, but
+           # at least we get "gint16 x, y" right. Such constructs
+           # should really be completely removed from the source.
+           # Or we should really try to understand the C syntax
+           # here...
+           
+           my @names = split /\s*,\s*/, $name;
+           for my $n (@names) {
+               push @result, $n;
+               if (defined $namefunc) {
+                   $n = $namefunc->($n);
+               }
+               push @result, "$mod1$ptype$ptr1$mod2$ptr2$n$array$bits";
+           }
+           
+        # Try to match structure members which are functions
+       } elsif ($line =~ m/^
+                (const\s+|unsigned\s+)*(struct\s+)?  # mod1 
+                (\w+)\s*                             # type
+                (\**)\s*                             # ptr1
+                (const\s+)?                          # mod2
+                \(\s*\*\s*(\w+)\s*\)\s*              # name
+                \(([^)]*)\)\s*                       # func_params
+                           $/x) {
+
+           my $mod1 = defined($1) ? $1 : "";
+           if (defined($2)) { $mod1 .= $2; }
+           my $type = $3;
+           my $ptr1 = $4;
+           my $mod2 = defined($5) ? $5 : "";
+           my $name = $6;
+           my $func_params = $7;
+           my $ptype = defined $typefunc ? $typefunc->($type) : $type;
+           my $pname = defined $namefunc ? $namefunc->($name) : $name;
+           
+           push @result, $name;
+           push @result, "$mod1$ptype$ptr1$mod2 (*$pname) ($func_params)";
+           
+       } else {
+           warn "Cannot parse structure field $line";
+       }
+    }
+    
+    return @result;
+}
+
+
+#############################################################################
+# Function    : ParseEnumDeclaration
+# Description : This function takes a enumeration declaration and
+#               breaks it into individual enum member declarations.
+# Arguments   : $declaration - the declaration to parse
+#############################################################################
+
+sub ParseEnumDeclaration {
+    my ($declaration, $is_object) = @_;
+
+    # Remove comments;
+    $declaration =~ s@/\*([^*]+|\*(?!/))*\*/@ @g;
+
+    my @result = ();
+
+    if ($declaration =~ /^\s*$/) {
+       return @result;
+    }
+
+    # Remove parenthesized expressions (in macros like GTK_BLAH = BLAH(1,3))
+    # to avoid getting confused by commas they might contain. This
+    # doesn't handle nested parentheses correctly.
+
+    $declaration =~ s/\([^)]+\)//g;
+
+    # Prime match after "typedef enum {" declaration
+    if (!scalar($declaration =~ m/typedef\s+enum\s*\{/msg)) {
+       die "Enum declaration '$declaration' does not begin with typedef enum {\n";
+    }
+
+    # Treat lines in sequence.
+    while ($declaration =~ m/\s*([^,\}]+)([,\}])/msg) {
+       my $line = $1;
+       my $terminator = $2;
+
+       if ($line =~ m/^(\w+)\s*(=.*)?$/msg) {
+           push @result, $1;
+           
+       # Special case for GIOCondition, where the values are specified by
+       # macros which expand to include the equal sign like '=1'.
+       } elsif ($line =~ m/^(\w+)\s*GLIB_SYSDEF_POLL/msg) {
+           push @result, $1;
+           
+       # Special case include of <gdk/gdkcursors.h>, just ignore it
+       } elsif ($line =~ m/^#include/) {
+           last;
+
+       } else {
+           warn "Cannot parse enumeration member $line";
+       }
+
+       last if $terminator eq '}';
+    }
+    
+    return @result;
+}
diff --git a/docs/plugins/gstdoc-mktmpl b/docs/plugins/gstdoc-mktmpl
new file mode 100755 (executable)
index 0000000..159c30d
--- /dev/null
@@ -0,0 +1,1346 @@
+#!/usr/bin/perl -w
+#
+# 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.
+#
+
+#############################################################################
+# Script      : gtkdoc-mktmpl
+# Description : This creates or updates the template files which contain the
+#              manually-edited documentation. (A 'template' is a simple text
+#              form which is filled in with the description of a function,
+#              macro, enum, or struct. For functions and macros it also
+#              contains fields for describing the parameters.)
+#
+#              This script reads in the existing templates, found in
+#              tmpl/*.sgml, moves these files to tmpl/*.sgml.bak, and then
+#              recreates the .sgml files according to the structure given in
+#              the file $MODULE-sections.txt.
+#
+#              Any new templates added, or new function parameters, are
+#              marked with 'FIXME' so you can do a grep to see which parts
+#              need updating.
+#
+#              Any templates which are no longer used (i.e. they are remove
+#              from $MODULE-sections.txt) are placed in the file
+#              tmpl/$MODULE-unused.txt. If they are included again later
+#              they are automatically copied back into position.
+#              If you are certain that these templates will never be used
+#              again you can delete them from $MODULE-unused.txt.
+#
+#              Any parameters to functions which are no longer used are
+#              separated from the rest of the parameters with the line
+#              '<!-- # Unused Parameters # -->'. It may be that the parameter
+#              name has just been changed, in which case you can copy the
+#              description to the parameter with the new name. You can delete
+#              the unused parameter descriptions when no longer needed.
+#############################################################################
+
+use strict;
+use Getopt::Long;
+
+# Options
+
+# name of documentation module
+my $MODULE;
+my $TMPL_DIR;
+my $FLAG_CHANGES;
+
+my %optctl = (module => \$MODULE,
+             'flag-changes' => \$FLAG_CHANGES,
+             'output-dir' => \$TMPL_DIR);
+GetOptions(\%optctl, "module=s", "flag-changes!", "output-dir:s");
+
+my $ROOT_DIR = ".";
+
+# The directory containing the template files.
+$TMPL_DIR = $TMPL_DIR ? $TMPL_DIR : "$ROOT_DIR/tmpl";
+
+# This file contains the object hierarchy.
+my $OBJECT_TREE_FILE = "$ROOT_DIR/$MODULE.hierarchy";
+
+# The file containing signal handler prototype information.
+my $SIGNALS_FILE = "$ROOT_DIR/$MODULE.signals";
+
+# The file containing Arg information.
+my $ARGS_FILE = "$ROOT_DIR/$MODULE.args";
+
+# Set the flag to indicate changes, if requested.
+my $CHANGES_FLAG = $FLAG_CHANGES ? "FIXME" : "";
+
+# These global arrays store information on signals. Each signal has an entry
+# in each of these arrays at the same index, like a multi-dimensional array.
+my @SignalObjects;     # The GtkObject which emits the signal.
+my @SignalNames;       # The signal name.
+my @SignalReturns;     # The return type.
+my @SignalPrototypes;  # The rest of the prototype of the signal handler.
+
+# These global arrays store information on Args. Each Arg has an entry
+# in each of these arrays at the same index, like a multi-dimensional array.
+my @ArgObjects;                # The GtkObject which has the Arg.
+my @ArgNames;          # The Arg name.
+my @ArgTypes;          # The Arg type - gint, GtkArrowType etc.
+my @ArgFlags;          # How the Arg can be used - readable/writable etc.
+
+# These global hashes store declaration info keyed on a symbol name.
+my %Declarations;
+my %DeclarationTypes;
+my %DeclarationConditional;
+my %DeclarationOutput;
+
+# These global hashes store the existing documentation.
+my %SymbolDocs;
+my %SymbolTypes;
+my %SymbolParams;
+
+# These global arrays store GtkObject and subclasses and the hierarchy.
+my @Objects;
+my @ObjectLevels;
+
+&ReadSignalsFile ($SIGNALS_FILE);
+&ReadArgsFile ($ARGS_FILE);
+&ReadObjectHierarchy;
+
+&ReadExistingTemplates;
+&BackupExistingTemplates;
+&UpdateTemplates ("$ROOT_DIR/$MODULE-sections.txt");
+&OutputUnusedTemplates;
+&CheckAllDeclarationsOutput;
+
+
+#############################################################################
+# Function    : ReadExistingTemplates
+# Description : This reads in all the existing documentation, into the global
+#              variables %SymbolDocs, %SymbolTypes, and %SymbolParams (a
+#              hash of arrays).
+# Arguments   : none
+#############################################################################
+
+sub ReadExistingTemplates {
+    %SymbolDocs = ();
+    %SymbolTypes = ();
+    %SymbolParams = ();
+
+    # Read the unused docs first, so they get overridden by any real docs.
+    # (though this shouldn't happen often).
+    my $unused_doc = "$TMPL_DIR/$MODULE-unused.sgml";
+    if (-e $unused_doc) {
+       &ReadTemplateFile ($unused_doc, 0);
+    }
+
+    while (<$TMPL_DIR/*.sgml>) {
+#      print "Reading $_\n";
+       if ($_ eq $unused_doc) {
+#          print "skipping $unused_doc\n";
+       } else {
+           &ReadTemplateFile ($_, 0);
+       }
+    }
+}
+
+
+#############################################################################
+# Function    : BackupExistingTemplates
+# Description : This moves all existing .sgml to .sgml.bak.
+# Arguments   : none
+#############################################################################
+
+sub BackupExistingTemplates {
+    while (<$TMPL_DIR/*.sgml>) {
+       my $backup_file = $_ . ".bak";
+#      print "Backing up $_ to $backup_file\n";
+       if (-e $backup_file) {
+           unlink ($backup_file)
+               || die "Can't delete old backup file: $backup_file";
+       }
+       rename ($_, $backup_file)
+           || die "Can't move $_ to $backup_file";
+    }
+}
+
+
+#############################################################################
+# Function    : UpdateTemplates
+# Description : This collects the output for each section of the docs, and
+#              outputs each file when the end of the section is found.
+# Arguments   : $file - the file containing the sections of the docs.
+#############################################################################
+
+sub UpdateTemplates {
+    my ($file) = @_;
+#    print "Reading: $file\n";
+
+    open (INPUT, $file)
+       || die "Can't open $file";
+
+    # Create the top output directory if it doesn't exist.
+    if (! -e $TMPL_DIR) {
+       mkdir ("$TMPL_DIR", 0777)
+           || die "Can't create directory: $TMPL_DIR";
+    }
+
+    my $title = "";
+    my $subsection = "";
+    my $output;
+    while (<INPUT>) {
+       if (m/^#/) {
+           next;
+
+       } elsif (m/^<SECTION>/) {
+           $output = "";
+
+       } elsif (m/^<SUBSECTION\s*(.*)>/i) {
+           $subsection = $1;
+           next;
+
+       } elsif (m/^<TITLE>(.*)<\/TITLE>/) {
+           $title = $1;
+#          print "Section: $title\n";
+
+           # We don't want warnings if object & class structs aren't used.
+#          $DeclarationOutput{$title} = 1;
+           $DeclarationOutput{"${title}Class"} = 1;
+
+       } elsif (m/^<FILE>(.*)<\/FILE>/) {
+           $file = $1;
+
+       } elsif (m/^<INCLUDE>(.*)<\/INCLUDE>/) {
+           next;
+
+       } elsif (m/^<\/SECTION>/) {
+           if ($title eq "") {
+               $title = $file;
+           }
+#          print "End of section: $title\n";
+
+           $file =~ s/\s/_/g;
+           $file .= ".sgml";
+
+           &OutputTemplateFile ($file, $title, \$output);
+
+           $title = "";
+           $subsection = "";
+
+       } elsif (m/^(\S+)/) {
+           my $symbol = $1;
+#          print "  Symbol: $symbol\n";
+
+           my $declaration = $Declarations{$1};
+           if (defined ($declaration)) {
+               # We don't want templates for standard macros/functions of
+               # GtkObjects or private declarations.
+               if ($subsection ne "Standard" && $subsection ne "Private") {
+                   $output .= &OutputDeclaration ($DeclarationTypes {$symbol},
+                                                  $symbol, $declaration);
+               }
+
+               # Note that the declaration has been output.
+               $DeclarationOutput{$symbol} = 1;
+
+               if ($declaration eq '##conditional##') {
+#                  print "Conditional $DeclarationTypes{$symbol}\n";
+               }
+           } else {
+               print "WARNING: No declaration for: $1\n";
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : CheckAllDeclarationsOutput
+# Description : This steps through all the declarations that were loaded, and
+#              makes sure that each one has been output, by checking the
+#              corresponding flag in the %DeclarationOutput hash. It is
+#              intended to check that any new declarations in new versions
+#              of GTK/Gnome get added to the $MODULE-sections.txt file.
+# Arguments   : none
+#############################################################################
+
+sub CheckAllDeclarationsOutput {
+    my $num_unused = 0;
+    open (UNUSED, ">$ROOT_DIR/$MODULE-unused.txt")
+       || die "Can't open $ROOT_DIR/$MODULE-unused.txt";
+    my ($symbol);
+    foreach $symbol (keys (%Declarations)) {
+       if (!defined ($DeclarationOutput{$symbol})) {
+           print (UNUSED "$symbol\n");
+           $num_unused++;
+       }
+    }
+    close (UNUSED);
+    if ($num_unused != 0) {
+       print <<EOF;
+=============================================================================
+WARNING: $num_unused unused declarations.
+  These can be found in $MODULE-unused.txt.
+  They should be added to $MODULE-sections.txt in the appropriate place.
+=============================================================================
+EOF
+    }
+}
+
+
+#############################################################################
+# Function    : OutputDeclaration
+# Description : This returns the template for one symbol & declaration.
+#              Note that it uses the global %SymbolDocs and %SymbolParams to
+#              lookup any existing documentation.
+# Arguments   : $type - the type of the symbol ('FUNCTION'/'MACRO' etc.)
+#              $symbol - the symbol name.
+#              $declaration - the declaration of the symbol.
+#############################################################################
+
+sub OutputDeclaration {
+    my ($type, $symbol, $declaration) = @_;
+    my ($output) = "";
+
+#    print "Outputting $type: $symbol\n";
+
+    # See if symbol already has a description.
+    my ($symbol_desc) = $SymbolDocs{$symbol};
+    my ($template_exists);
+    if (defined ($symbol_desc)) {
+       $template_exists = 1;
+       $symbol_desc =~ s/\s+$//;
+    } else {
+       $template_exists = 0;
+       $symbol_desc = "<para>\n$CHANGES_FLAG\n</para>";
+    }
+
+    $output .= <<EOF;
+<!-- ##### $type $symbol ##### -->
+$symbol_desc
+
+EOF
+
+    # For functions, function typedefs and macros, we output the arguments.
+    # For functions and function typedefs we also output the return value.
+    if ($type eq "FUNCTION" || $type eq "USER_FUNCTION") {
+       # Take out the return type
+       $declaration =~ s/<RETURNS>\s*(const\s+|unsigned\s+)*(\w+)\s*(\**)\s*<\/RETURNS>\n//;
+       my ($ret_type) = $2;
+
+       my ($param_num) = 0;
+       my ($name);
+       while ($declaration ne "") {
+           if ($declaration =~ s/^[\s,]+//) {
+               # skip whitespace and commas
+               next;
+
+           } elsif ($declaration =~ s/^void\s*[,\n]//) {
+               if ($param_num != 0) {
+                   print "WARNING: void used as parameter in function $symbol\n";
+               }
+               
+           } elsif ($declaration =~ s/^...\s*[,\n]//) {
+               $output .= &OutputParam ($symbol, "Varargs",
+                                        $template_exists, 1, "");
+
+               # Try to match a standard parameter.
+           } elsif ($declaration =~ s/^(const\s+|unsigned\s+)*(struct\s+)?(\w+)\s*(\**)\s*(const\s+)?(\**)?\s*(\w+)?\s*(\[\d*\])?\s*[,\n]//) {
+               if (defined ($7)) {
+                   $name = $7;
+               } else {
+                   $name = "Param" . ($param_num + 1);
+               }
+               $output .= &OutputParam ($symbol, $name, $template_exists, 1,
+                                        "");
+
+               # Try to match parameters which are functions.
+           } elsif ($declaration =~ s/^(const\s+|unsigned\s+)*(struct\s+)?(\w+)\s*(\**)\s*(const\s+)?\(\s*\*\s*(\w+)\s*\)\s*\(([^)]*)\)\s*[,\n]//) {
+               $name = $6;
+               $output .= &OutputParam ($symbol, $name, $template_exists, 1,
+                                        "");
+
+           } else {
+               print "###Can't parse args for function $symbol: $declaration\n";
+               last;
+           }
+           $param_num++;
+       }
+
+    
+       if ($ret_type ne "void") {
+           $output .= &OutputParam ($symbol, "Returns", $template_exists, 1,
+                                    "");
+       }
+        $output .= &OutputOldParams ($symbol);
+       $output .= "\n";
+    }
+
+    if ($type eq "MACRO") {
+       if ($declaration =~ m/^\s*#\s*define\s+\w+\(([^\)]*)\)/) {
+           my ($param);
+           foreach $param (split (/,/, $1)) {
+               $param =~ s/^\s+//;
+               $param =~ s/\s*$//;
+               if ($param =~ m/\S/) {
+                   $output .= &OutputParam ($symbol, $param, $template_exists,
+                                            1, "");
+               }
+           }
+       }
+       $output .= &OutputParam ($symbol, "Returns", $template_exists, 0, "");
+       $output .= &OutputOldParams ($symbol);
+       $output .= "\n";
+    }
+
+    if ($type eq "STRUCT") {
+       my $is_object_struct = CheckIsObject ($symbol);
+       my @fields = ParseStructDeclaration($declaration, $is_object_struct);
+
+       for (my $i = 0; $i <= $#fields; $i += 2) {
+           my $field_name = $fields[$i];
+           $output .= &OutputParam ($symbol, $field_name, $template_exists, 1, "");
+       }
+    }
+
+    if ($type eq "ENUM") {
+       my @members = ParseEnumDeclaration($declaration);
+
+       for my $member (@members) {
+           $output .= &OutputParam ($symbol, $member, $template_exists, 1, "");
+       }
+    }
+
+    $output .= "\n";
+
+    # Remove the used docs from the hashes.
+    if ($template_exists) {
+       delete $SymbolDocs{$symbol};
+       delete $SymbolParams{$symbol};
+    }
+
+    return $output;
+}
+
+
+#############################################################################
+# Function    : OutputParam
+# Description : This outputs the part of a template for one parameter.
+#              It first checks if the parameter is already described, and if
+#              so it uses that description, and clears it so it isn't output
+#              as an old param.
+# Arguments   : $symbol - the symbol (function or macro) name.
+#              $param_to_output - the parameter to add.
+#              $template_exists - TRUE if the template already existed in
+#                template files. If it did, then we will flag any changes
+#                with 'FIXME'.
+#              $force_output - TRUE if the parameter should be output even
+#                if it didn't already exist in the template. (The return
+#                values of macros are added manually if required, and so we
+#                never add it here - we only copy it if it already exists.)
+#              $default_description - the default description of the
+#                parameter to be used if it doesn't already exist. (Signal
+#                handlers have a few common parameters.)
+#############################################################################
+
+sub OutputParam {
+    my ($symbol, $param_to_output, $template_exists,
+       $force_output, $default_description) = @_;
+    my ($j);
+
+    my ($params) = $SymbolParams{$symbol};
+    if (defined ($params)) {
+       for ($j = 0; $j <= $#$params; $j += 2) {
+           my $param_name = $$params[$j];
+           my $param_desc = $$params[$j + 1];
+
+           if ($param_name eq $param_to_output) {
+               $param_desc =~ s/\s+$//;
+               $$params[$j] = "";
+               $$params[$j + 1] = "";
+               return "\@$param_name: $param_desc\n";
+           }
+       }
+    }
+
+    # If the template was already in a file, flag the new parameter.
+    # If not, the template itself will be flagged, so we don't need to flag
+    # all the new parameters as well.
+    if ($force_output) {
+       if ($default_description ne "") {
+           $default_description =~ s/\s+$//;
+           return "\@$param_to_output: $default_description\n";
+       } else {
+           if ($template_exists) {
+               return "\@$param_to_output: $CHANGES_FLAG\n";
+           } else {
+               return "\@$param_to_output: \n";
+           }
+       }
+    }
+    return "";
+}
+
+
+#############################################################################
+# Function    : OutputOldParams
+# Description : This returns all the existing documentation for parameters of
+#              the given function/macro/signal symbol which are unused, with
+#              a comment before them.
+# Arguments   : $symbol - the symbol (function/macro/signal) name.
+#############################################################################
+
+sub OutputOldParams {
+    my ($symbol) = @_;
+    my $output = "";
+
+    my ($params) = $SymbolParams{$symbol};
+    if (defined ($params)) {
+       my $j;
+       for ($j = 0; $j <= $#$params; $j += 2) {
+           my $param_name = $$params[$j];
+           my $param_desc = $$params[$j + 1];
+
+           if ($param_name ne "") {
+               $param_desc =~ s/\s+$//;
+               $output .= "\@$param_name: $param_desc\n";
+           }
+       }
+    }
+    if ($output) {
+       $output = "<!-- # Unused Parameters # -->\n" . $output;
+    }
+    return $output;
+}
+
+
+#############################################################################
+# Function    : OutputTemplateFile
+# Description : This outputs one template file.
+# Arguments   : $file - the basename of the file to output.
+#              $title - the title from the $MODULE-sections.txt file. This
+#                will be overridden by any title given in the template file.
+#              $output - reference to the templates to output.
+#############################################################################
+
+sub OutputTemplateFile {
+    my ($file, $title, $output) = @_;
+
+    my ($short_desc, $long_desc, $see_also);
+
+    if (defined ($SymbolDocs{"$TMPL_DIR/$file:Title"})) {
+       $title = $SymbolDocs{"$TMPL_DIR/$file:Title"};
+       delete $SymbolDocs{"$TMPL_DIR/$file:Title"};
+    }
+    if (defined ($SymbolDocs{"$TMPL_DIR/$file:Short_Description"})) {
+       $short_desc = $SymbolDocs{"$TMPL_DIR/$file:Short_Description"};
+       delete $SymbolDocs{"$TMPL_DIR/$file:Short_Description"};
+    } else {
+       $short_desc = "";
+    }
+    if (defined ($SymbolDocs{"$TMPL_DIR/$file:Long_Description"})) {
+       $long_desc = $SymbolDocs{"$TMPL_DIR/$file:Long_Description"};
+       delete $SymbolDocs{"$TMPL_DIR/$file:Long_Description"};
+    } else {
+       $long_desc = "<para>\n\n</para>\n";
+    }
+    if (defined ($SymbolDocs{"$TMPL_DIR/$file:See_Also"})) {
+       $see_also = $SymbolDocs{"$TMPL_DIR/$file:See_Also"};
+       delete $SymbolDocs{"$TMPL_DIR/$file:See_Also"};
+    } else {
+       $see_also = "<para>\n\n</para>\n";
+    }
+
+    open (OUTPUT, ">$TMPL_DIR/$file")
+       || die "Can't create $TMPL_DIR/$file";
+
+    print (OUTPUT <<EOF);
+<!-- ##### SECTION Title ##### -->
+$title
+
+<!-- ##### SECTION Short_Description ##### -->
+$short_desc
+
+<!-- ##### SECTION Long_Description ##### -->
+$long_desc
+
+<!-- ##### SECTION See_Also ##### -->
+$see_also
+
+EOF
+
+    print (OUTPUT $$output);
+    &OutputSignalTemplates ($title);
+    &OutputArgTemplates ($title);
+    close (OUTPUT);
+}
+
+
+#############################################################################
+# Function    : OutputSignalTemplates
+# Description : Outputs templates for signal handlers.
+# Arguments   : $title - the title from the $MODULE-sections.txt file. If the
+#                file is describing a GtkObject subclass, the title should
+#                be the name of the class, e.g. 'GtkButton'.
+#############################################################################
+
+sub OutputSignalTemplates {
+    my ($title) = @_;
+
+    my $output = "";
+    my ($i, $template_exists);
+    for ($i = 0; $i <= $#SignalObjects; $i++) {
+       if ($SignalObjects[$i] eq $title) {
+#          print "Found signal: $SignalObjects[$i]\n";
+           my ($symbol) = "$SignalObjects[$i]::$SignalNames[$i]";
+
+           # See if symbol already has a description.
+           my ($symbol_desc) = $SymbolDocs{$symbol};
+           if (defined ($symbol_desc)) {
+               $template_exists = 1;
+               $symbol_desc =~ s/\s+$//;
+               delete $SymbolDocs{$symbol};
+           } else {
+               $template_exists = 0;
+               $symbol_desc = "<para>\n$CHANGES_FLAG\n</para>";
+           }
+
+           $output .= <<EOF;
+<!-- ##### SIGNAL $symbol ##### -->
+$symbol_desc
+
+EOF
+           
+           my @params = split ("[,\n]", $SignalPrototypes[$i]);
+           my ($j, $name);
+           for ($j = 0; $j <= $#params; $j++) {
+               my $param = $params[$j];
+               $param =~ s/^\s+//;
+               $param =~ s/\s*$//;
+               if ($param =~ m/^\s*$/) { next; }
+               if ($param =~ m/^void$/) { next; }
+
+               if ($param =~ m/^\s*(\w+)\s*(\**)\s*([\w\[\]]+)?\s*$/) {
+                   if (defined($3)) {
+                       $name = $3;
+                   } else {
+                       $name = "Param" . ($j + 1);
+                   }
+                   if ($j == 0) {
+                       $output .= &OutputParam ($symbol, $name,
+                                                $template_exists, 1,
+                                                "the object which received the signal.");
+                   } else {
+                       $output .= &OutputParam ($symbol, $name,
+                                                $template_exists, 1, "");
+                   }
+               }       
+           }
+           
+           if ($SignalReturns[$i] ne "void") {
+               $output .= &OutputParam ($symbol, "Returns", $template_exists,
+                                        1, "");
+           }
+           $output .= &OutputOldParams ($symbol);
+           $output .= "\n";
+       }
+    }
+    print (OUTPUT $output);
+}
+
+
+#############################################################################
+# Function    : OutputArgTemplates
+# Description : Outputs templates for Args.
+# Arguments   : $title - the title from the $MODULE-sections.txt file. If the
+#                file is describing a GtkObject subclass, the title should
+#                be the name of the class, e.g. 'GtkButton'.
+#############################################################################
+
+sub OutputArgTemplates {
+    my ($title) = @_;
+
+    my $output = "";
+    my $i;
+    for ($i = 0; $i <= $#ArgObjects; $i++) {
+       if ($ArgObjects[$i] eq $title) {
+#          print "Found arg: $ArgObjects[$i]\n";
+           # I've only used one colon so we don't clash with signals.
+           my ($symbol) = "$ArgObjects[$i]:$ArgNames[$i]";
+
+           # See if symbol already has a description.
+           my ($symbol_desc) = $SymbolDocs{$symbol};
+           if (defined ($symbol_desc)) {
+               delete $SymbolDocs{$symbol};
+               $symbol_desc =~ s/\s+$//;
+           } else {
+               $symbol_desc = "<para>\n$CHANGES_FLAG\n</para>";
+           }
+
+           $output .= <<EOF;
+<!-- ##### ARG $symbol ##### -->
+$symbol_desc
+
+EOF
+       }
+    }
+    print (OUTPUT $output);
+}
+
+
+#############################################################################
+# Function    : OutputUnusedTemplates
+# Description : This saves any unused documentation into $MODULE-unused.sgml.
+# Arguments   : none
+#############################################################################
+
+sub OutputUnusedTemplates {
+    my ($unused_file) = "$TMPL_DIR/$MODULE-unused.sgml";
+    open (UNUSED, ">$unused_file")
+       || die "Can't open file: $unused_file";
+
+    my $output = "";
+    my ($symbol, $symbol_desc);
+    while (($symbol, $symbol_desc) = each (%SymbolDocs)) {
+#      print "Unused: $symbol\n";
+
+       my $type = $SymbolTypes{$symbol};
+       if (!defined ($type)) {
+           $type = "UNKNOWN";
+           print "WARNING: Unused symbol $symbol has unknown type\n";
+       }
+
+    $output .= <<EOF;
+<!-- ##### $type $symbol ##### -->
+$symbol_desc
+
+EOF
+
+       my ($params) = $SymbolParams{$symbol};
+       if (defined ($params)) {
+           my $j;
+           for ($j = 0; $j <= $#$params; $j += 2) {
+               my $param_name = $$params[$j];
+               my $param_desc = $$params[$j + 1];
+               $param_desc =~ s/\s+$//;
+               $output .= "\@$param_name: $param_desc\n";
+           }
+       }
+       $output .= "\n";
+    }
+
+    print UNUSED $output;
+    close (UNUSED);
+}
+
+
+#############################################################################
+# LIBRARY FUNCTIONS -  These functions are used in both gtkdoc-mkdb and
+#                      gtkdoc-mktmpl and should eventually be moved to a
+#                      separate library.
+#############################################################################
+
+#############################################################################
+# Function    : ReadDeclarationsFile
+# Description : This reads in a file containing the function/macro/enum etc.
+#              declarations.
+#              
+#              Note that in some cases there are several declarations with
+#              the same name, e.g. for conditional macros. In this case we
+#              set a flag in the %DeclarationConditional hash so the
+#              declaration is not shown in the docs.
+#
+#              If a macro and a function have the same name, e.g. for
+#              gtk_object_ref, the function declaration takes precedence.
+#
+#              Some opaque structs are just declared with 'typedef struct
+#              _name name;' in which case the declaration may be empty.
+#              The structure may have been found later in the header, so
+#              that overrides the empty declaration.
+#              
+# Arguments   : $file - the declarations file to read
+#              $override - if declarations in this file should override
+#                      any current declaration.
+#############################################################################
+
+sub ReadDeclarationsFile {
+    my ($file, $override) = @_;
+
+    if ($override == 0) {
+       %Declarations = ();
+       %DeclarationTypes = ();
+       %DeclarationConditional = ();
+       %DeclarationOutput = ();
+    }
+
+    open (INPUT, $file)
+       || die "Can't open $file";
+    my $declaration_type = "";
+    my $declaration_name;
+    my $declaration;
+    while (<INPUT>) {
+       if (!$declaration_type) {
+           if (m/^<([^>]+)>/) {
+               $declaration_type = $1;
+               $declaration_name = "";
+#              print "Found declaration: $declaration_type\n";
+               $declaration = "";
+           }
+       } else {
+           if (m%^<NAME>(.*)</NAME>%) {
+               $declaration_name = $1;
+           } elsif (m%^</$declaration_type>%) {
+#              print "Found end of declaration: $declaration_name\n";
+               # Check that the declaration has a name
+               if ($declaration_name eq "") {
+                   print "ERROR: $declaration_type has no name $file:$.\n";
+               }
+
+               # Check if the symbol is already defined.
+               if (defined ($Declarations{$declaration_name})
+                   && $override == 0) {
+                   # Function declarations take precedence.
+                   if ($DeclarationTypes{$declaration_name} eq 'FUNCTION') {
+                       # Ignore it.
+                   } elsif ($declaration_type eq 'FUNCTION') {
+                       $Declarations{$declaration_name} = $declaration;
+                       $DeclarationTypes{$declaration_name} = $declaration_type;
+                   } elsif ($DeclarationTypes{$declaration_name}
+                             eq $declaration_type) {
+                       # If the existing declaration is empty override it.
+                       if ($declaration_type eq 'STRUCT') {
+                           if ($Declarations{$declaration_name} =~ m/^\s*$/) {
+                               $Declarations{$declaration_name} = $declaration;
+                           } elsif ($declaration =~ m/^\s*$/) {
+                               # Ignore an empty declaration.
+                           } else {
+                               print "WARNING: Structure has multiple definitions: $declaration_name\n";
+                           }
+
+                       } else {
+                           # set flag in %DeclarationConditional hash for
+                           # multiply defined macros/typedefs.
+                           $DeclarationConditional{$declaration_name} = 1;
+                       }
+                   } else {
+                       print "WARNING: $declaration_name has multiple definitions\n";
+                   }
+               } else {
+                   $Declarations{$declaration_name} = $declaration;
+                   $DeclarationTypes{$declaration_name} = $declaration_type;
+               }
+               $declaration_type = "";
+           } else {
+               $declaration .= $_;
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : ReadSignalsFile
+# Description : This reads in an existing file which contains information on
+#              all GTK signals. It creates the arrays @SignalNames and
+#              @SignalPrototypes containing info on the signals. The first
+#              line of the SignalPrototype is the return type of the signal
+#              handler. The remaining lines are the parameters passed to it.
+#              The last parameter, "gpointer user_data" is always the same
+#              so is not included.
+# Arguments   : $file - the file containing the signal handler prototype
+#                      information.
+#############################################################################
+
+sub ReadSignalsFile {
+    my ($file) = @_;
+
+    my $in_signal = 0;
+    my $signal_object;
+    my $signal_name;
+    my $signal_returns;
+    my $signal_prototype;
+
+    # Reset the signal info.
+    @SignalObjects = ();
+    @SignalNames = ();
+    @SignalReturns = ();
+    @SignalPrototypes = ();
+
+    if (! -f $file) {
+       return;
+    }
+    if (!open (INPUT, $file)) {
+       warn "Can't open $file - skipping signals\n";
+       return;
+    }
+    while (<INPUT>) {
+       if (!$in_signal) {
+           if (m/^<SIGNAL>/) {
+               $in_signal = 1;
+               $signal_object = "";
+               $signal_name = "";
+               $signal_returns = "";
+               $signal_prototype = "";
+           }
+       } else {
+           if (m/^<NAME>(.*)<\/NAME>/) {
+               $signal_name = $1;
+               if ($signal_name =~ m/^(.*)::(.*)$/) {
+                   $signal_object = $1;
+                   $signal_name = $2;
+#                  print "Found signal: $signal_name\n";
+               } else {
+                   print "Invalid signal name: $signal_name\n";
+               }
+           } elsif (m/^<RETURNS>(.*)<\/RETURNS>/) {
+               $signal_returns = $1;
+           } elsif (m%^</SIGNAL>%) {
+#              print "Found end of signal: ${signal_object}::${signal_name}\nReturns: ${signal_returns}\n${signal_prototype}";
+               push (@SignalObjects, $signal_object);
+               push (@SignalNames, $signal_name);
+               push (@SignalReturns, $signal_returns);
+               push (@SignalPrototypes, $signal_prototype);
+               $in_signal = 0;
+           } else {
+               $signal_prototype .= $_;
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : ReadTemplateFile
+# Description : This reads in the manually-edited documentation file
+#              corresponding to the file currently being created, so we can
+#              insert the documentation at the appropriate places.
+#              It outputs %SymbolTypes, %SymbolDocs and %SymbolParams, which
+#              is a hash of arrays.
+#              NOTE: This function is duplicated in gtkdoc-mkdb (but
+#              slightly different).
+# Arguments   : $docsfile - the template file to read in.
+#              $skip_unused_params - 1 if the unused parameters should be
+#                      skipped.
+#############################################################################
+
+sub ReadTemplateFile {
+    my ($docsfile, $skip_unused_params) = @_;
+
+#    print "Reading $docsfile\n";
+    if (! -f $docsfile) {
+       print "File doesn't exist: $docsfile\n";
+       return; 
+    }
+
+    my $CurrentType = "";      # Type of symbol being read.
+    my $CurrentSymbol = "";    # Name of symbol being read.
+    my $SymbolDoc = "";                # Description of symbol being read.
+    my @Params;                        # Parameter names and descriptions of current
+                               #   function/macro/function typedef.
+    my $CurrentParam = -1;     # Index of parameter currently being read.
+                               #   Note that the param array contains pairs
+                               #   of param name & description.
+    my $InUnusedParameters = 0;        # True if we are reading in the unused params.
+
+    open (DOCS, $docsfile)
+       || die "Can't open file $docsfile: $!";
+    while (<DOCS>) {
+       if (m/^<!-- ##### ([A-Z_]+) (\S+) ##### -->/) {
+           my $type = $1;
+           my $symbol = $2;
+           if ($symbol eq "Title"
+               || $symbol eq "Short_Description"
+               || $symbol eq "Long_Description"
+               || $symbol eq "See_Also") {
+               $symbol = $docsfile . ":" . $symbol;
+#              print "Found symbol: $symbol\n";
+           }
+
+           # Store previous symbol, but remove any trailing blank lines.
+           if ($CurrentSymbol ne "") {
+               $SymbolDoc =~ s/\s+$//;
+               $SymbolTypes{$CurrentSymbol} = $CurrentType;
+               $SymbolDocs{$CurrentSymbol} = $SymbolDoc;
+               if ($CurrentParam >= 0) {
+                   $SymbolParams{$CurrentSymbol} = [ @Params ];
+               } else {
+                   # Delete any existing params in case we are overriding a
+                   # previously read template.
+                   delete $SymbolParams{$CurrentSymbol};
+               }
+           }
+           $CurrentType = $type;
+           $CurrentSymbol = $symbol;
+           $CurrentParam = -1;
+           $InUnusedParameters = 0;
+           $SymbolDoc = "";
+           @Params = ();
+
+       } elsif (m/^<!-- # Unused Parameters # -->/) {
+           $InUnusedParameters = 1;
+           next;
+
+       } else {
+           # Check if param found
+           if (s/^\@(\S+):\s*//) {
+               my $param_name = $1;
+               # Allow variations of 'Returns'
+               if ($param_name =~ m/^[Rr]eturns?$/) {
+                   $param_name = "Returns";
+               }
+#              print "Found param: $param_name\n";
+               push (@Params, $param_name);
+               push (@Params, $_);
+               $CurrentParam += 2;
+               next;
+           }
+
+           # When outputting the DocBook we skip unused parameters.
+           if (!$InUnusedParameters || !$skip_unused_params) {
+               if ($CurrentParam >= 0) {
+                   $Params[$CurrentParam] .= $_;
+               } else {
+                   $SymbolDoc .= $_;
+               }
+           }
+       }
+    }
+
+    # Remember to finish the current symbol doccs.
+    if ($CurrentSymbol ne "") {
+       $SymbolDoc =~ s/\s+$//;
+       $SymbolTypes{$CurrentSymbol} = $CurrentType;
+       $SymbolDocs{$CurrentSymbol} = $SymbolDoc;
+       if ($CurrentParam >= 0) {
+           $SymbolParams{$CurrentSymbol} = [ @Params ];
+       } else {
+           delete $SymbolParams{$CurrentSymbol};
+       }
+    }
+
+    close (DOCS);
+}
+
+
+#############################################################################
+# Function    : ReadObjectHierarchy
+# Description : This reads in the $MODULE-hierarchy.txt file containing all
+#              the GtkObject subclasses described in this module (and their
+#              ancestors).
+#              It places them in the @Objects array, and places their level
+#              in the widget hierarchy in the @ObjectLevels array, at the
+#              same index. GtkObject, the root object, has a level of 1.
+#   
+#               FIXME: the version in gtkdoc-mkdb also generates tree_index.sgml
+#               as it goes along, this should be split out into a separate
+#               function.
+# 
+# Arguments   : none
+#############################################################################
+
+sub ReadObjectHierarchy {
+    @Objects = ();
+    @ObjectLevels = ();
+
+    if (! -f $OBJECT_TREE_FILE) {
+       return;
+    }
+    if (!open (INPUT, $OBJECT_TREE_FILE)) {
+       warn "Can't open $OBJECT_TREE_FILE - skipping object tree\n";
+       return;
+    }
+    while (<INPUT>) {
+        if (m/\S+/) {
+           my $object = $&;
+           my $level = (length($`)) / 2 + 1;
+#            print ("Level: $level  Object: $object\n");
+
+           push (@Objects, $object);
+           push (@ObjectLevels, $level);
+        }
+    }
+
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : ReadArgsFile
+# Description : This reads in an existing file which contains information on
+#              all GTK args. It creates the arrays @ArgObjects, @ArgNames,
+#              @ArgTypes and @ArgFlags containing info on the args.
+# Arguments   : $file - the file containing the arg information.
+#############################################################################
+
+sub ReadArgsFile {
+    my ($file) = @_;
+
+    my $in_arg = 0;
+    my $arg_object;
+    my $arg_name;
+    my $arg_type;
+    my $arg_flags;
+
+    # Reset the signal info.
+    @ArgObjects = ();
+    @ArgNames = ();
+    @ArgTypes = ();
+    @ArgFlags = ();
+
+    if (! -f $file) {
+       return;
+    }
+    if (!open (INPUT, $file)) {
+       warn "Can't open $file - skipping args\n";
+       return;
+    }
+    while (<INPUT>) {
+       if (!$in_arg) {
+           if (m/^<ARG>/) {
+               $in_arg = 1;
+               $arg_object = "";
+               $arg_name = "";
+               $arg_type = "";
+               $arg_flags = "";
+           }
+       } else {
+           if (m/^<NAME>(.*)<\/NAME>/) {
+               $arg_name = $1;
+               if ($arg_name =~ m/^(.*)::(.*)$/) {
+                   $arg_object = $1;
+                   $arg_name = $2;
+#                  print "Found arg: $arg_name\n";
+               } else {
+                   print "Invalid arg name: $arg_name\n";
+               }
+           } elsif (m/^<TYPE>(.*)<\/TYPE>/) {
+               $arg_type = $1;
+           } elsif (m/^<FLAGS>(.*)<\/FLAGS>/) {
+               $arg_flags = $1;
+           } elsif (m%^</ARG>%) {
+#              print "Found end of arg: ${arg_object}::${arg_name}\n${arg_type} : ${arg_flags}\n";
+               push (@ArgObjects, $arg_object);
+               push (@ArgNames, $arg_name);
+               push (@ArgTypes, $arg_type);
+               push (@ArgFlags, $arg_flags);
+               $in_arg = 0;
+           }
+       }
+    }
+    close (INPUT);
+}
+
+
+#############################################################################
+# Function    : CheckIsObject
+# Description : Returns 1 if the given name is a GtkObject or a subclass.
+#              It uses the global @Objects array.
+#              Note that the @Objects array only contains classes in the
+#              current module and their ancestors - not all GTK classes.
+# Arguments   : $name - the name to check.
+#############################################################################
+
+sub CheckIsObject {
+    my ($name) = @_;
+
+    my $object;
+    foreach $object (@Objects) {
+       if ($object eq $name) {
+           return 1;
+       }
+    }
+    return 0;
+}
+
+
+#############################################################################
+# Function    : ParseStructDeclaration
+# Description : This function takes a structure declaration and
+#               breaks it into individual type declarations.
+# Arguments   : $declaration - the declaration to parse
+#               $is_object - true if this is an object structure
+#               $typefunc - function reference to apply to type
+#               $namefunc - function reference to apply to name
+#############################################################################
+
+sub ParseStructDeclaration {
+    my ($declaration, $is_object, $typefunc, $namefunc) = @_;
+
+    # Remove all private parts of the declaration
+
+    # For objects, assume private
+    if ($is_object) {
+       $declaration =~ s!(struct\s+\w*\s*\{)
+                         .*?
+                         (?:/\*\s*<\s*public\s*>\s*\*/|(?=\}))!$1!msgx;
+    }
+    
+    $declaration =~ s!\n?[ \t]*/\*\s*<\s*private\s*>\s*\*/
+                     .*?
+                     (?:/\*\s*<\s*public\s*>\s*\*/|(?=\}))!!msgx;
+    
+    # Remove all other comments;
+    $declaration =~ s@/\*([^*]+|\*(?!/))*\*/@ @g;
+
+    my @result = ();
+
+    if ($declaration =~ /^\s*$/) {
+       return @result;
+    }
+
+    # Prime match after "struct {" declaration
+    if (!scalar($declaration =~ m/struct\s+\w*\s*\{/msg)) {
+       die "Structure declaration '$declaration' does not begin with struct [NAME] {\n";
+    }
+
+    # Treat lines in sequence, allowing singly nested anonymous structs
+    # and unions.
+    while ($declaration =~ m/\s*([^{;]+(\{[^\}]*\}[^{;]+)?);/msg) {
+       my $line = $1;
+       
+       last if $line =~ /^\s*\}\s*\w*\s*$/;
+
+       # FIXME: Just ignore nested structs and unions for now
+       next if $line =~ /{/;
+
+       # FIXME: The regexes here are the same as in OutputFunction; 
+       #        this functionality should be separated out.
+
+       if ($line =~ m/^
+           (const\s+|unsigned\s+)*(struct\s+)? # mod1
+           (\w+)\s*                            # type
+           (\**)\s*                            # ptr1
+           (const\s+)?                         # mod2
+           (\**)?\s*                           # ptr2
+           (\w+(?:\s*,\s*\w+)*)\s*             # name
+           (?:((?:\[[^\]]*\]\s*)+) |           # array
+              (:\s*\d+))?\s*                   # bits
+                      $/x) {
+           my $mod1 = defined($1) ? $1 : "";
+           if (defined($2)) { $mod1 .= $2; }
+           my $type = $3;
+           my $ptr1 = $4;
+           my $mod2 = defined($5) ? $5 : "";
+           my $ptr2 = $6;
+           my $name = $7;
+           $ptr1 = " " . $ptr1;
+           my $array = defined($8) ? $8 : "";
+           my $bits =  defined($9) ? " $9" : "";
+           my $ptype = defined $typefunc ? $typefunc->($type) : $type;
+           
+           # FIXME:
+           # As a hack, we allow the "name" to be of the form
+           # "a, b, c". This isn't the correct C syntax, but
+           # at least we get "gint16 x, y" right. Such constructs
+           # should really be completely removed from the source.
+           # Or we should really try to understand the C syntax
+           # here...
+           
+           my @names = split /\s*,\s*/, $name;
+           for my $n (@names) {
+               push @result, $n;
+               if (defined $namefunc) {
+                   $n = $namefunc->($n);
+               }
+               push @result, "$mod1$ptype$ptr1$mod2$ptr2$n$array$bits";
+           }
+           
+        # Try to match structure members which are functions
+       } elsif ($line =~ m/^
+                (const\s+|unsigned\s+)*(struct\s+)?  # mod1 
+                (\w+)\s*                             # type
+                (\**)\s*                             # ptr1
+                (const\s+)?                          # mod2
+                \(\s*\*\s*(\w+)\s*\)\s*              # name
+                \(([^)]*)\)\s*                       # func_params
+                           $/x) {
+
+           my $mod1 = defined($1) ? $1 : "";
+           if (defined($2)) { $mod1 .= $2; }
+           my $type = $3;
+           my $ptr1 = $4;
+           my $mod2 = defined($5) ? $5 : "";
+           my $name = $6;
+           my $func_params = $7;
+           my $ptype = defined $typefunc ? $typefunc->($type) : $type;
+           my $pname = defined $namefunc ? $namefunc->($name) : $name;
+           
+           push @result, $name;
+           push @result, "$mod1$ptype$ptr1$mod2 (*$pname) ($func_params)";
+           
+       } else {
+           warn "Cannot parse structure field $line";
+       }
+    }
+    
+    return @result;
+}
+
+
+#############################################################################
+# Function    : ParseEnumDeclaration
+# Description : This function takes a enumeration declaration and
+#               breaks it into individual enum member declarations.
+# Arguments   : $declaration - the declaration to parse
+#############################################################################
+
+sub ParseEnumDeclaration {
+    my ($declaration, $is_object) = @_;
+
+    # Remove comments;
+    $declaration =~ s@/\*([^*]+|\*(?!/))*\*/@ @g;
+
+    my @result = ();
+
+    if ($declaration =~ /^\s*$/) {
+       return @result;
+    }
+
+    # Remove parenthesized expressions (in macros like GTK_BLAH = BLAH(1,3))
+    # to avoid getting confused by commas they might contain. This
+    # doesn't handle nested parentheses correctly.
+
+    $declaration =~ s/\([^)]*\)//g;
+
+    # Prime match after "typedef enum {" declaration
+    if (!scalar($declaration =~ m/typedef\s+enum\s*\{/msg)) {
+       die "Enum declaration '$declaration' does not begin with typedef enum {\n";
+    }
+
+    # Treat lines in sequence.
+    while ($declaration =~ m/\s*([^,\}]+)([,\}])/msg) {
+       my $line = $1;
+       my $terminator = $2;
+
+       if ($line =~ m/^(\w+)\s*(=.*)?$/msg) {
+           push @result, $1;
+           
+       # Special case for GIOCondition, where the values are specified by
+       # macros which expand to include the equal sign like '=1'.
+       } elsif ($line =~ m/^(\w+)\s*GLIB_SYSDEF_POLL/msg) {
+           push @result, $1;
+           
+       # Special case include of <gdk/gdkcursors.h>, just ignore it
+       } elsif ($line =~ m/^#include/) {
+           last;
+
+       } else {
+           warn "Cannot parse enumeration member $line";
+       }
+
+       last if $terminator eq '}';
+    }
+    
+    return @result;
+}
diff --git a/docs/plugins/gstdoc-scanobj b/docs/plugins/gstdoc-scanobj
new file mode 100755 (executable)
index 0000000..6c05821
--- /dev/null
@@ -0,0 +1,872 @@
+#!/usr/bin/perl -w
+#
+# 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 heirarchies and signals
+# by compiling a small C program. CFLAGS and LDFLAGS must be
+# set appropriately before running this script.
+#
+# NOTE: the lookup_signal_srg_names() function contains the argument names of
+#       standard GTK signal handlers. This may need to be updated for new
+#       GTK signals or Gnome widget signals.
+
+use Getopt::Long;
+
+# Options
+
+# name of documentation module
+my $MODULE;
+my $OUTPUT_DIR;
+
+%optctl = (module => \$MODULE,
+          types => \$TYPES_FILE,
+          nogtkinit => \$NO_GTK_INIT);
+          
+GetOptions(\%optctl, "module=s", "types:s", "nogtkinit");
+
+$TYPES_FILE = $TYPES_FILE ? $TYPES_FILE : "$MODULE.types";
+
+open TYPES, $TYPES_FILE || die "Cannot open $TYPES_FILE: $!\n";
+open OUTPUT, ">$MODULE-scan.c" || die "Cannot open $MODULE-scan.c: $!\n";
+
+# write a C program to scan the types
+
+$includes = "";
+@types = ();
+
+for (<TYPES>) {
+    if (/^#include/) {
+       $includes .= $_;
+    } elsif (/^%/) {
+       next;
+    } elsif (/^\s*$/) {
+       next;
+    } else {
+       chomp;
+       push @types, $_;
+    }
+}
+
+$ntypes = @types + 1;
+
+print OUTPUT <<EOT;
+#include <string.h>
+#include <stdio.h>
+
+$includes
+GtkType object_types[$ntypes];
+GstElement *elements[$ntypes];
+
+gint _typenr = 0;
+
+gboolean 
+get_plugins ()
+{
+    gint i = 0;
+EOT
+
+for (@types) {
+    print OUTPUT "    gst_plugin_load(\"$_\");\n";
+    print OUTPUT "    elements[i] = gst_elementfactory_make(\"$_\", \"dummy\");\n";
+    print OUTPUT "    object_types[i] = GTK_OBJECT_TYPE(GTK_OBJECT(elements[i]));\n";
+    print OUTPUT "    i++; \n";
+}
+    print OUTPUT "    object_types[i] = 0;\n";
+
+print OUTPUT <<EOT;
+    return TRUE;
+}
+
+/*
+ * This uses GTK type functions to output signal prototypes and the widget
+ * hierarchy.
+ */
+
+/* The output files */
+gchar *signals_filename = "$MODULE.signals";
+gchar *hierarchy_filename = "$MODULE.hierarchy";
+gchar *args_filename = "$MODULE.args";
+gchar *pads_filename = "$MODULE.pads";
+
+
+static void output_signals ();
+static void output_widget_signals (FILE *fp,
+                                  GtkType object_type);
+static void output_widget_signal (FILE *fp,
+                                 GtkType object_type,
+                                 gchar *object_class_name,
+                                 guint signal_id);
+static gchar * get_type_name (GtkType type,
+                             gboolean * is_pointer);
+static gchar * get_gdk_event (const gchar * signal_name);
+static gchar ** lookup_signal_arg_names (gchar * type,
+                                        const gchar * signal_name);
+
+static void output_widget_hierarchy ();
+static void output_hierarchy (FILE *fp,
+                             GtkType type,
+                             gint level);
+
+static void output_args ();
+static void output_widget_args (FILE *fp, GtkType object_type);
+
+static void output_pads ();
+static void output_widget_pads (FILE *fp, GstElement *element);
+
+int
+main (int argc, char *argv[])
+{
+EOT
+
+  if ($NO_GTK_INIT) {
+    print OUTPUT <<EOT;
+  gtk_type_init ();
+EOT
+  } else {
+    print OUTPUT <<EOT;
+  gtk_init (&argc, &argv);
+EOT
+  }
+
+print OUTPUT <<EOT;
+  gst_init (&argc, &argv);
+  get_plugins();
+
+  output_widget_hierarchy ();
+  output_signals ();
+  output_args ();
+  output_pads ();
+
+  return 0;
+}
+
+
+static void
+output_signals ()
+{
+  FILE *fp;
+  gint i;
+
+  fp = fopen (signals_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s", signals_filename);
+      return;
+    }
+
+  for (i = 0; object_types[i]; i++)
+    output_widget_signals (fp, object_types[i]);
+
+  fclose (fp);
+}
+
+
+/* This outputs all the signals of one widget. */
+static void
+output_widget_signals (FILE *fp, GtkType object_type)
+{
+  GtkObjectClass *class;
+  gchar *object_class_name;
+  guint sig;
+
+  class = gtk_type_class (object_type);
+  if (!class || class->nsignals == 0)
+    return;
+
+  object_class_name = gtk_type_name (object_type);
+
+  for (sig = 0; sig < class->nsignals; sig++)
+    {
+      if (!class->signals[sig])
+        {
+          /*g_print ("Signal slot [%u] is empty\n", sig);*/
+          continue;
+        }
+
+      output_widget_signal (fp, object_type, object_class_name,
+                           class->signals[sig]);
+    }
+}
+
+
+/* This outputs one signal. */
+static void
+output_widget_signal (FILE *fp,
+                     GtkType object_type,
+                     gchar *object_name,
+                     guint signal_id)
+{
+  GtkSignalQuery *query_info;
+  gchar *ret_type, *pos, *type_name, *arg_name, *object_arg, *object_arg_start;
+  gboolean is_pointer;
+  gchar ret_type_buffer[1024], buffer[1024];
+  gint i, param;
+  gchar **arg_names;
+  gint param_num, widget_num, event_num, callback_num;
+  gint *arg_num;
+  gchar signal_name[128];
+
+
+  /*  g_print ("Object: %s Type: %i Signal: %u\n", object_name, object_type,
+      signal_id);*/
+
+  param_num = 1;
+  widget_num = event_num = callback_num = 0;
+
+  query_info = gtk_signal_query (signal_id);
+  if (query_info == NULL)
+    {
+      g_warning ("Couldn't query signal");
+      return;
+    }
+
+  /* Output the return type and function name. */
+  ret_type = get_type_name (query_info->return_val, &is_pointer);
+  sprintf (ret_type_buffer, "%s%s", ret_type, is_pointer ? "*" : "");
+
+  /* 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);
+
+  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_start = pos;
+  sprintf (pos, "*%s\n", object_arg);
+  pos += strlen (pos);
+  g_strdown (object_arg_start);
+  if (!strcmp (object_arg_start, "widget"))
+    widget_num++;
+  
+  /* Convert signal name to use underscores rather than dashes '-'. */
+  strcpy (signal_name, query_info->signal_name);
+  for (i = 0; signal_name[i]; i++)
+    {
+      if (signal_name[i] == '-')
+       signal_name[i] = '_';
+    }
+
+  /* Output the signal parameters. */
+  arg_names = lookup_signal_arg_names (object_name, signal_name);
+
+  for (param = 0; param < query_info->nparams; param++)
+    {
+      if (arg_names)
+       {
+         sprintf (pos, "%s\n", arg_names[param]);
+         pos += strlen (pos);
+       }
+      else
+       {
+         type_name = get_type_name (query_info->params[param], &is_pointer);
+
+         /* Most arguments to the callback are called "arg1", "arg2", etc.
+            GdkWidgets are called "widget", "widget2", ...
+            GdkEvents are called "event", "event2", ...
+            GtkCallbacks are called "callback", "callback2", ... */
+         if (!strcmp (type_name, "GtkWidget"))
+           {
+             arg_name = "widget";
+             arg_num = &widget_num;
+           }
+         else if (!strcmp (type_name, "GdkEvent"))
+           {
+             type_name = get_gdk_event (signal_name);
+             arg_name = "event";
+             arg_num = &event_num;
+             is_pointer = TRUE;
+           }
+         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)
+               *arg_num += 1;
+       }
+    }
+  
+  fprintf (fp,
+          "<SIGNAL>\n<NAME>%s::%s</NAME>\n<RETURNS>%s</RETURNS>\n%s</SIGNAL>\n\n",
+          object_name, query_info->signal_name, ret_type_buffer, buffer);
+  g_free (query_info);
+}
+
+
+static gchar *
+get_type_name (GtkType type, gboolean * is_pointer)
+{
+  static gchar *GbTypeNames[] =
+  {
+    "char", "gchar",
+    "bool", "gboolean",
+    "int", "gint",
+    "uint", "guint",
+    "long", "glong",
+    "ulong", "gulong",
+    "float", "gfloat",
+    "double", "gdouble",
+    "string", "gchar",
+    "enum", "gint",
+    "flags", "gint",
+    "boxed", "gpointer",
+    "foreign", "gpointer",
+    "callback", "GtkCallback", /* ?? */
+    "args", "gpointer",
+
+    "pointer", "gpointer",
+    "signal", "gpointer",
+    "c_callback", "GtkCallback",       /* ?? */
+
+    NULL
+  };
+
+  GtkType parent_type;
+  gchar *type_name, *parent_type_name;
+  gint i;
+
+  *is_pointer = FALSE;
+  type_name = gtk_type_name (type);
+  for (i = 0; GbTypeNames[i]; i += 2)
+    {
+      if (!strcmp (type_name, GbTypeNames[i]))
+       {
+         if (!strcmp (type_name, "string"))
+           *is_pointer = TRUE;
+         return GbTypeNames[i + 1];
+       }
+    }
+
+  for (;;)
+    {
+      parent_type = gtk_type_parent (type);
+      if (parent_type == 0)
+       break;
+      type = parent_type;
+    }
+  parent_type_name = gtk_type_name (type);
+  /*g_print ("Parent type name: %s\n", parent_type_name);*/
+  if (!strcmp (parent_type_name, "GtkObject")
+      || !strcmp (parent_type_name, "boxed")
+      || !strcmp (parent_type_name, "GtkBoxed"))
+    *is_pointer = TRUE;
+
+  return type_name;
+}
+
+
+static gchar *
+get_gdk_event (const gchar * signal_name)
+{
+  static gchar *GbGDKEvents[] =
+  {
+    "button_press_event", "GdkEventButton",
+    "button_release_event", "GdkEventButton",
+    "motion_notify_event", "GdkEventMotion",
+    "delete_event", "GdkEvent",
+    "destroy_event", "GdkEvent",
+    "expose_event", "GdkEventExpose",
+    "key_press_event", "GdkEventKey",
+    "key_release_event", "GdkEventKey",
+    "enter_notify_event", "GdkEventCrossing",
+    "leave_notify_event", "GdkEventCrossing",
+    "configure_event", "GdkEventConfigure",
+    "focus_in_event", "GdkEventFocus",
+    "focus_out_event", "GdkEventFocus",
+    "map_event", "GdkEvent",
+    "unmap_event", "GdkEvent",
+    "property_notify_event", "GdkEventProperty",
+    "selection_clear_event", "GdkEventSelection",
+    "selection_request_event", "GdkEventSelection",
+    "selection_notify_event", "GdkEventSelection",
+    "proximity_in_event", "GdkEventProximity",
+    "proximity_out_event", "GdkEventProximity",
+    "drag_begin_event", "GdkEventDragBegin",
+    "drag_request_event", "GdkEventDragRequest",
+    "drag_end_event", "GdkEventDragRequest",
+    "drop_enter_event", "GdkEventDropEnter",
+    "drop_leave_event", "GdkEventDropLeave",
+    "drop_data_available_event", "GdkEventDropDataAvailable",
+    "other_event", "GdkEventOther",
+    "client_event", "GdkEventClient",
+    "no_expose_event", "GdkEventNoExpose",
+    NULL
+  };
+
+  gint i;
+
+  for (i = 0; GbGDKEvents[i]; i += 2)
+    {
+      if (!strcmp (signal_name, GbGDKEvents[i]))
+       return GbGDKEvents[i + 1];
+    }
+  return "GdkEvent";
+}
+
+
+/* This returns argument names to use for some known GTK signals.
+    It is passed a widget name, e.g. 'GtkCList' and a signal name, e.g.
+    'select_row' and it returns a pointer to an array of argument types and
+    names. */
+static gchar **
+lookup_signal_arg_names (gchar * type, const gchar * signal_name)
+{
+  /* Each arg array starts with the object type name and the signal name,
+     and then signal arguments follow. */
+  static gchar *GbArgTable[][16] =
+  {
+    {"GtkCList", "select_row",
+     "gint             row",
+     "gint             column",
+     "GdkEventButton  *event"},
+    {"GtkCList", "unselect_row",
+     "gint             row",
+     "gint             column",
+     "GdkEventButton  *event"},
+    {"GtkCList", "click_column",
+     "gint             column"},
+
+    {"GtkCList", "resize_column",
+     "gint             column",
+     "gint             width"},
+
+    {"GtkCList", "extend_selection",
+     "GtkScrollType    scroll_type",
+     "gfloat           position",
+     "gboolean         auto_start_selection"},
+    {"GtkCList", "scroll_vertical",
+     "GtkScrollType    scroll_type",
+     "gfloat           position"},
+    {"GtkCList", "scroll_horizontal",
+     "GtkScrollType    scroll_type",
+     "gfloat           position"},
+    {"GtkContainer", "focus",
+     "GtkDirectionType direction"},
+    {"GtkCTree", "tree_select_row",
+     "GList           *node",
+     "gint             column"},
+    {"GtkCTree", "tree_unselect_row",
+     "GList           *node",
+     "gint             column"},
+
+    {"GtkCTree", "tree_expand",
+     "GList           *node"},
+    {"GtkCTree", "tree_collapse",
+     "GList           *node"},
+    {"GtkCTree", "tree_move",
+     "GList           *node",
+     "GList           *new_parent",
+     "GList           *new_sibling"},
+    {"GtkCTree", "change_focus_row_expansion",
+     "GtkCTreeExpansionType expansion"},
+
+    {"GtkEditable", "insert_text",
+     "gchar           *new_text",
+     "gint             new_text_length",
+     "gint            *position"},
+    {"GtkEditable", "delete_text",
+     "gint             start_pos",
+     "gint             end_pos"},
+    {"GtkEditable", "set_editable",
+     "gboolean         is_editable"},
+    {"GtkEditable", "move_cursor",
+     "gint             x",
+     "gint             y"},
+    {"GtkEditable", "move_word",
+     "gint             num_words"},
+    {"GtkEditable", "move_page",
+     "gint             x",
+     "gint             y"},
+    {"GtkEditable", "move_to_row",
+     "gint             row"},
+    {"GtkEditable", "move_to_column",
+     "gint             column"},
+
+    {"GtkEditable", "kill_char",
+     "gint             direction"},
+    {"GtkEditable", "kill_word",
+     "gint             direction"},
+    {"GtkEditable", "kill_line",
+     "gint             direction"},
+
+
+    {"GtkInputDialog", "enable_device",
+     "gint             deviceid"},
+    {"GtkInputDialog", "disable_device",
+     "gint             deviceid"},
+
+    {"GtkListItem", "extend_selection",
+     "GtkScrollType    scroll_type",
+     "gfloat           position",
+     "gboolean         auto_start_selection"},
+    {"GtkListItem", "scroll_vertical",
+     "GtkScrollType    scroll_type",
+     "gfloat           position"},
+    {"GtkListItem", "scroll_horizontal",
+     "GtkScrollType    scroll_type",
+     "gfloat           position"},
+
+    {"GtkMenuShell", "move_current",
+     "GtkMenuDirectionType direction"},
+    {"GtkMenuShell", "activate_current",
+     "gboolean         force_hide"},
+
+
+    {"GtkNotebook", "switch_page",
+     "GtkNotebookPage *page",
+     "gint             page_num"},
+    {"GtkStatusbar", "text_pushed",
+     "guint            context_id",
+     "gchar           *text"},
+    {"GtkStatusbar", "text_popped",
+     "guint            context_id",
+     "gchar           *text"},
+    {"GtkTipsQuery", "widget_entered",
+     "GtkWidget       *widget",
+     "gchar           *tip_text",
+     "gchar           *tip_private"},
+    {"GtkTipsQuery", "widget_selected",
+     "GtkWidget       *widget",
+     "gchar           *tip_text",
+     "gchar           *tip_private",
+     "GdkEventButton  *event"},
+    {"GtkToolbar", "orientation_changed",
+     "GtkOrientation   orientation"},
+    {"GtkToolbar", "style_changed",
+     "GtkToolbarStyle  style"},
+    {"GtkWidget", "draw",
+     "GdkRectangle    *area"},
+    {"GtkWidget", "size_request",
+     "GtkRequisition  *requisition"},
+    {"GtkWidget", "size_allocate",
+     "GtkAllocation   *allocation"},
+    {"GtkWidget", "state_changed",
+     "GtkStateType     state"},
+    {"GtkWidget", "style_set",
+     "GtkStyle        *previous_style"},
+
+    {"GtkWidget", "install_accelerator",
+     "gchar           *signal_name",
+     "gchar            key",
+     "gint             modifiers"},
+
+    {"GtkWidget", "add_accelerator",
+     "guint            accel_signal_id",
+     "GtkAccelGroup   *accel_group",
+     "guint            accel_key",
+     "GdkModifierType  accel_mods",
+     "GtkAccelFlags    accel_flags"},
+
+    {"GtkWidget", "parent_set",
+     "GtkObject       *old_parent"},
+
+    {"GtkWidget", "remove_accelerator",
+     "GtkAccelGroup   *accel_group",
+     "guint            accel_key",
+     "GdkModifierType  accel_mods"},
+    {"GtkWidget", "debug_msg",
+     "gchar           *message"},
+    {"GtkWindow", "move_resize",
+     "gint            *x",
+     "gint            *y",
+     "gint             width",
+     "gint             height"},
+    {"GtkWindow", "set_focus",
+     "GtkWidget       *widget"},
+
+    {"GtkWidget", "selection_get",
+     "GtkSelectionData *data",
+     "guint            info",
+     "guint            time"},
+    {"GtkWidget", "selection_received",
+     "GtkSelectionData *data",
+     "guint            time"},
+
+    {"GtkWidget", "drag_begin",
+     "GdkDragContext  *drag_context"},
+    {"GtkWidget", "drag_end",
+     "GdkDragContext  *drag_context"},
+    {"GtkWidget", "drag_data_delete",
+     "GdkDragContext  *drag_context"},
+    {"GtkWidget", "drag_leave",
+     "GdkDragContext  *drag_context",
+     "guint            time"},
+    {"GtkWidget", "drag_motion",
+     "GdkDragContext  *drag_context",
+     "gint             x",
+     "gint             y",
+     "guint            time"},
+    {"GtkWidget", "drag_drop",
+     "GdkDragContext  *drag_context",
+     "gint             x",
+     "gint             y",
+     "guint            time"},
+    {"GtkWidget", "drag_data_get",
+     "GdkDragContext  *drag_context",
+     "GtkSelectionData *data",
+     "guint            info",
+     "guint            time"},
+    {"GtkWidget", "drag_data_received",
+     "GdkDragContext  *drag_context",
+     "gint             x",
+     "gint             y",
+     "GtkSelectionData *data",
+     "guint            info",
+     "guint            time"},
+
+    {NULL}
+  };
+
+  gint i;
+
+  for (i = 0; GbArgTable[i][0]; i++)
+    {
+      if (!strcmp (type, GbArgTable[i][0])
+         && !strcmp (signal_name, GbArgTable[i][1]))
+       return &GbArgTable[i][2];
+    }
+  return NULL;
+}
+
+
+/* This outputs the hierarchy of all widgets which have been initialized,
+   i.e. by calling their XXX_get_type() initialization function. */
+static void
+output_widget_hierarchy ()
+{
+  FILE *fp;
+
+  fp = fopen (hierarchy_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s", hierarchy_filename);
+      return;
+    }
+  output_hierarchy (fp, GTK_TYPE_OBJECT, 0);
+  fclose (fp);
+}
+
+
+/* This is called recursively to output the hierarchy of a widget. */
+static void
+output_hierarchy (FILE *fp,
+                 GtkType type,
+                 gint level)
+{
+  GList *list;
+  guint i;
+
+  if (!type)
+    return;
+
+  for (i = 0; i < level; i++)
+    fprintf (fp, "  ");
+  fprintf (fp, gtk_type_name (type));
+  fprintf (fp, "\n");
+
+  list = gtk_type_children_types (type);
+
+  while (list)
+    {
+      GtkType child = (GtkType) list->data;
+      output_hierarchy (fp, child, level + 1);
+      list = list->next;
+    }
+}
+
+
+static void
+output_args ()
+{
+  FILE *fp;
+  gint i;
+
+  fp = fopen (args_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s", args_filename);
+      return;
+    }
+
+  for (i = 0; object_types[i]; i++)
+    output_widget_args (fp, object_types[i]);
+
+  fclose (fp);
+}
+
+
+static void
+output_widget_args (FILE *fp, GtkType object_type)
+{
+  GtkObjectClass *class;
+  gchar *object_class_name;
+  GtkArg *args;
+  guint32 *arg_flags;
+  guint n_args;
+  gint arg;
+  gchar flags[16], *pos;
+
+  class = gtk_type_class (object_type);
+  if (!class)
+    return;
+
+  object_class_name = gtk_type_name (object_type);
+
+  args = gtk_object_query_args (class->type, &arg_flags, &n_args);
+
+  for (arg = 0; arg < n_args; arg++)
+    {
+      pos = flags;
+      /* We use one-character flags for simplicity. */
+      if (arg_flags[arg] & GTK_ARG_READABLE)
+       *pos++ = 'r';
+      if (arg_flags[arg] & GTK_ARG_WRITABLE)
+       *pos++ = 'w';
+      if (arg_flags[arg] & GTK_ARG_CONSTRUCT)
+       *pos++ = 'x';
+      if (arg_flags[arg] & GTK_ARG_CONSTRUCT_ONLY)
+       *pos++ = 'X';
+      if (arg_flags[arg] & GTK_ARG_CHILD_ARG)
+       *pos++ = 'c';
+      *pos = '\0';
+
+      fprintf (fp, "<ARG>\n<NAME>%s</NAME>\n<TYPE>%s</TYPE>\n<FLAGS>%s</FLAGS>\n",
+              args[arg].name, gtk_type_name (args[arg].type), flags);
+
+      if (GTK_FUNDAMENTAL_TYPE(args[arg].type) == GTK_TYPE_ENUM) {
+        GtkEnumValue *values;
+       gint i=0;
+
+       values = gtk_type_enum_get_values(args[arg].type);
+
+       while (values[i].value_name) {
+          fprintf (fp, "<ENUM>\n<VALUE>%d</VALUE>\n<NICK>%s</NICK>\n</ENUM>\n",
+               values[i].value, values[i].value_nick);
+         i++;
+       }
+      }
+      
+      fprintf(fp, "</ARG>\n\n");
+    }
+
+  g_free (args);
+  g_free (arg_flags);
+}
+
+
+static void
+output_pads ()
+{
+  FILE *fp;
+  gint i;
+
+  fp = fopen (pads_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s", pads_filename);
+      return;
+    }
+
+  for (i = 0; elements[i]; i++)
+    output_widget_pads (fp, elements[i]);
+
+  fclose (fp);
+}
+
+static void
+output_widget_pads (FILE *fp, GstElement *element)
+{
+  GtkObjectClass *class;
+  GstElementFactory *factory;
+  GList *pads;
+
+  class = GTK_OBJECT(element)->klass;
+  if (!class || !GST_IS_ELEMENT_CLASS(class))
+    return;
+
+  pads = gst_element_get_pad_list(element);
+
+  factory = GST_ELEMENT_CLASS(class)->elementfactory;
+
+  if (!factory)
+    return;
+
+  while (pads) {
+    GstPad *pad = (GstPad *)pads->data;
+    GstType *type;
+
+    type = gst_type_find_by_id(pad->type);
+
+    fprintf (fp, "<PAD>\n<NAME>%s::%s</NAME>\n",
+              gtk_type_name(factory->type), pad->name);
+    
+    if (type) {
+      fprintf(fp, "<MIME>%s</MIME>\n", type->mime);
+      if (type->exts)
+        fprintf(fp, "<EXTS>%s</EXTS>\n", type->exts);
+    }
+
+    fprintf(fp, "</PAD>\n\n");
+
+    pads = g_list_next(pads);
+  }
+}
+
+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} : "";
+
+$command = "$CC $CFLAGS -c -o $MODULE-scan.o $MODULE-scan.c && $LD -o $MODULE-scan $MODULE-scan.o $LDFLAGS";
+
+system($command) == 0 or die "Compilation of scanner failed\n";
+
+system("./$MODULE-scan") == 0 or die "Scan failed\n";
+
+unlink "./$MODULE-scan.c", "./$MODULE-scan", 
diff --git a/docs/plugins/gstreamer-plugins-docs.sgml b/docs/plugins/gstreamer-plugins-docs.sgml
new file mode 100644 (file)
index 0000000..13267f9
--- /dev/null
@@ -0,0 +1,120 @@
+<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
+
+<!entity GstParseAu SYSTEM "sgml/gstparseau.sgml">
+<!entity Audioscale SYSTEM "sgml/audioscale.sgml">
+<!entity GstAviEncoder SYSTEM "sgml/gstaviencoder.sgml">
+<!entity GstParseAvi SYSTEM "sgml/gstparseavi.sgml">
+<!entity GstWinDec SYSTEM "sgml/gstwindec.sgml">
+<!entity GstWinEnc SYSTEM "sgml/gstwinenc.sgml">
+<!entity GstV4lSrc SYSTEM "sgml/gstv4lsrc.sgml">
+<!entity GstStereo SYSTEM "sgml/stereo.sgml">
+<!entity GstVolume SYSTEM "sgml/volume.sgml">
+<!entity GstMedian SYSTEM "sgml/median.sgml">
+<!entity GstSmooth SYSTEM "sgml/smooth.sgml">
+<!entity GstJpegDec SYSTEM "sgml/gstjpegdec.sgml">
+<!entity GstJpegEnc SYSTEM "sgml/gstjpegenc.sgml">
+<!entity GstMpg123 SYSTEM "sgml/gstmpg123.sgml">
+<!entity Mp3Parse SYSTEM "sgml/mp3parse.sgml">
+<!entity GstMpegplay SYSTEM "sgml/gstmpeg_play.sgml">
+<!entity GstMpegAudio SYSTEM "sgml/gstmpegaudio.sgml">
+<!entity GstMpeg1Parse SYSTEM "sgml/mpeg1parse.sgml">
+<!entity SystemEncode SYSTEM "sgml/system_encode.sgml">
+<!entity Mp1VideoParse SYSTEM "sgml/mp1videoparse.sgml">
+<!entity Ac3Dec SYSTEM "sgml/ac3dec.sgml">
+<!entity Ac3Parse SYSTEM "sgml/ac3parse.sgml">
+<!entity GstMpeg2enc SYSTEM "sgml/gstmpeg2enc.sgml">
+<!entity Mpeg2Parse SYSTEM "sgml/mpeg2parse.sgml">
+<!entity Mpeg2Subt SYSTEM "sgml/mpeg2subt.sgml">
+<!entity Mpeg2Play SYSTEM "sgml/gstmpeg2play.sgml">
+<!entity Mp2VideoParse SYSTEM "sgml/mp2videoparse.sgml">
+<!entity RTJpegDec SYSTEM "sgml/rtjpegdec.sgml">
+<!entity RTJpegEnc SYSTEM "sgml/rtjpegenc.sgml">
+<!entity VCDSrc SYSTEM "sgml/vcdsrc.sgml">
+<!entity Videoscale SYSTEM "sgml/videoscale.sgml">
+<!entity VideoSink SYSTEM "sgml/videosink.sgml">
+<!entity GstSmoothWave SYSTEM "sgml/smoothwave.sgml">
+<!entity GstSpectrum SYSTEM "sgml/gstspectrum.sgml">
+<!entity GstSynaesthesia SYSTEM "sgml/synaesthesia.sgml">
+<!entity GstVuMeter SYSTEM "sgml/vumeter.sgml">
+<!entity VorbisDec SYSTEM "sgml/vorbisdec.sgml">
+<!entity VorbisEnc SYSTEM "sgml/vorbisenc.sgml">
+<!entity GstParseWav SYSTEM "sgml/gstparsewav.sgml">
+
+<!entity gstreamer-tree-index SYSTEM "sgml/tree_index.sgml">
+]>
+
+
+<book>
+  <bookinfo>
+    <title>GStreamer Library Reference Manual (Plugins)</title>
+  </bookinfo>
+
+  <chapter id="plugins">
+    <title>GStreamer Standard Plugins</title>
+
+    <para>
+      The following code example shows you how to create a GstDiskSrc element.
+    </para>
+
+      &GstParseAu;
+      &Audioscale;
+
+      &GstAviEncoder;
+      &GstParseAvi;
+      &GstWinDec;
+      &GstWinEnc;
+      &GstParseWav;
+
+      &GstV4lSrc;
+
+      &GstStereo;
+      &GstVolume;
+
+      &GstMedian;
+      &GstSmooth;
+
+      &GstJpegDec;
+      &GstJpegEnc;
+
+      &GstMpg123;
+      &Mp3Parse;
+      &GstMpegplay;
+      &GstMpegAudio;
+      &GstMpeg1Parse;
+      &SystemEncode;
+      &Mp1VideoParse;
+
+      &Ac3Dec;
+      &Ac3Parse;
+      &GstMpeg2enc;
+      &Mpeg2Parse;
+      &Mpeg2Subt;
+      &Mpeg2Play;
+      &Mp2VideoParse;
+
+      &RTJpegDec;
+      &RTJpegEnc;
+
+      &VCDSrc;
+
+      &Videoscale;
+      &VideoSink;
+
+      &GstSmoothWave;
+      &GstSpectrum;
+      &GstSynaesthesia;
+      &GstVuMeter;
+
+      &VorbisDec;
+      &VorbisEnc;
+  </chapter>
+
+  <chapter id="gst-index">
+    <title>Index</title>
+
+    <sect1>
+      <title>Object Hierarchy</title>
+      &gstreamer-tree-index;
+    </sect1>
+  </chapter>
+</book>
diff --git a/docs/plugins/gstreamer-plugins-sections.txt b/docs/plugins/gstreamer-plugins-sections.txt
new file mode 100644 (file)
index 0000000..699abdd
--- /dev/null
@@ -0,0 +1,333 @@
+<SECTION>
+<FILE>example</FILE>
+<TITLE>GstExample</TITLE>
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>gstparseau</FILE>
+<TITLE>GstParseAu</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstaviencoder</FILE>
+<TITLE>GstAviEncoder</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_AVIENCODER
+</SECTION>
+
+<SECTION>
+<FILE>gstparseavi</FILE>
+<TITLE>GstParseAvi</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAVI
+</SECTION>
+
+<SECTION>
+<FILE>gstwindec</FILE>
+<TITLE>GstWinDec</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstwinenc</FILE>
+<TITLE>GstWinEnc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstwincodec</FILE>
+<TITLE>GstWin</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstv4lsrc</FILE>
+<TITLE>GstV4lSrc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>cobin</FILE>
+<TITLE>GstCoBin</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>spindentity</FILE>
+<TITLE>GstSpindentity</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>dvdsrc</FILE>
+<TITLE>DVDSrc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>stereo</FILE>
+<TITLE>GstStereo</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>volume</FILE>
+<TITLE>GstVolume</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstjpeg</FILE>
+<TITLE>GstJpeg</TITLE>
+</SECTION>
+
+<SECTION>
+<FILE>gstjpegdec</FILE>
+<TITLE>GstJpegDec</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstjpegenc</FILE>
+<TITLE>GstJpegEnc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstmpg123</FILE>
+<TITLE>GstMpg123</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>mp3parse</FILE>
+<TITLE>Mp3Parse</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstxa</FILE>
+<TITLE>GstXa</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstxing</FILE>
+<TITLE>GstXing</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstmpeg_play</FILE>
+<TITLE>GstMpeg_play</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>mpeg1parse</FILE>
+<TITLE>Mpeg1Parse</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstmpeg1encoder</FILE>
+<TITLE>GstMpeg1encoder</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>system_encode</FILE>
+<TITLE>System_Encode</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstmpegaudio</FILE>
+<TITLE>GstMpegAudio</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>mp1videoparse</FILE>
+<TITLE>Mp1VideoParse</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>ac3dec</FILE>
+<TITLE>Ac3Dec</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>ac3parse</FILE>
+<TITLE>Ac3Parse</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>mpeg2parse</FILE>
+<TITLE>Mpeg2Parse</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstmpeg2play</FILE>
+<TITLE>GstMpeg2play</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstmpeg2enc</FILE>
+<TITLE>GstMpeg2enc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>mpeg2subt</FILE>
+<TITLE>Mpeg2Subt</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>mp2videoparse</FILE>
+<TITLE>Mp2VideoParse</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>rtjpegdec</FILE>
+<TITLE>RTJpegDec</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>rtjpegenc</FILE>
+<TITLE>RTJpegEnc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>vcdsrc</FILE>
+<TITLE>VCDSrc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>videosink</FILE>
+<TITLE>GstVideoSink</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_VIDEOSINK
+</SECTION>
+
+<SECTION>
+<FILE>smoothwave</FILE>
+<TITLE>GstSmoothWave</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstspectrum</FILE>
+<TITLE>GstSpectrum</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>synaesthesia</FILE>
+<TITLE>GstSynaesthesia</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>vumeter</FILE>
+<TITLE>GstVuMeter</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>gstparsewav</FILE>
+<TITLE>GstParseWav</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>smooth</FILE>
+<TITLE>GstSmooth</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>median</FILE>
+<TITLE>GstMedian</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>videoscale</FILE>
+<TITLE>Videoscale</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>audioscale</FILE>
+<TITLE>Audioscale</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>vorbisenc</FILE>
+<TITLE>VorbisEnc</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
+<SECTION>
+<FILE>vorbisdec</FILE>
+<TITLE>VorbisDec</TITLE>
+<SUBSECTION Standard>
+GST_TYPE_PARSEAU
+</SECTION>
+
diff --git a/docs/plugins/tmpl/ac3dec.sgml b/docs/plugins/tmpl/ac3dec.sgml
new file mode 100644 (file)
index 0000000..e0524e4
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+Ac3Dec
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/ac3parse.sgml b/docs/plugins/tmpl/ac3parse.sgml
new file mode 100644 (file)
index 0000000..9c0b4eb
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+Ac3Parse
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Ac3Parse:skip ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/audioscale.sgml b/docs/plugins/tmpl/audioscale.sgml
new file mode 100644 (file)
index 0000000..1bdd4a8
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+Audioscale
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Audioscale:frequency ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/cobin.sgml b/docs/plugins/tmpl/cobin.sgml
new file mode 100644 (file)
index 0000000..18fbaf1
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstCoBin
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/dvdsrc.sgml b/docs/plugins/tmpl/dvdsrc.sgml
new file mode 100644 (file)
index 0000000..829ef68
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+DVDSrc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/example.sgml b/docs/plugins/tmpl/example.sgml
new file mode 100644 (file)
index 0000000..7bb0d34
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstExample
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstaviencoder.sgml b/docs/plugins/tmpl/gstaviencoder.sgml
new file mode 100644 (file)
index 0000000..453ee2e
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+GstAviEncoder
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstAviEncoder:video ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstAviEncoder:audio ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstjpeg.sgml b/docs/plugins/tmpl/gstjpeg.sgml
new file mode 100644 (file)
index 0000000..f387761
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstJpeg
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstjpegdec.sgml b/docs/plugins/tmpl/gstjpegdec.sgml
new file mode 100644 (file)
index 0000000..ccbb494
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstJpegDec
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstjpegenc.sgml b/docs/plugins/tmpl/gstjpegenc.sgml
new file mode 100644 (file)
index 0000000..f3b3d06
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstJpegEnc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstmpeg1encoder.sgml b/docs/plugins/tmpl/gstmpeg1encoder.sgml
new file mode 100644 (file)
index 0000000..6118976
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstMpeg1encoder
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstmpeg2enc.sgml b/docs/plugins/tmpl/gstmpeg2enc.sgml
new file mode 100644 (file)
index 0000000..2ce7435
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+GstMpeg2enc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstMpeg2enc:frames_per_second ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstmpeg2play.sgml b/docs/plugins/tmpl/gstmpeg2play.sgml
new file mode 100644 (file)
index 0000000..c279658
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+GstMpeg2play
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstMpeg2play:frames_per_second ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstmpeg_play.sgml b/docs/plugins/tmpl/gstmpeg_play.sgml
new file mode 100644 (file)
index 0000000..b3b9db6
--- /dev/null
@@ -0,0 +1,24 @@
+<!-- ##### SECTION Title ##### -->
+GstMpeg_play
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SIGNAL GstMpeg_play::frame-decoded ##### -->
+<para>
+
+</para>
+
+@gstmpeg_play: the object which received the signal.
+@arg1: 
+
diff --git a/docs/plugins/tmpl/gstmpegaudio.sgml b/docs/plugins/tmpl/gstmpegaudio.sgml
new file mode 100644 (file)
index 0000000..a86cf22
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstMpegAudio
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstmpg123.sgml b/docs/plugins/tmpl/gstmpg123.sgml
new file mode 100644 (file)
index 0000000..fe375f7
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstMpg123
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstparseau.sgml b/docs/plugins/tmpl/gstparseau.sgml
new file mode 100644 (file)
index 0000000..d2f22aa
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+parseau
+
+<!-- ##### SECTION Short_Description ##### -->
+Parse an .au file into raw audio
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstparseavi.sgml b/docs/plugins/tmpl/gstparseavi.sgml
new file mode 100644 (file)
index 0000000..22a8f3e
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstParseAvi
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstparsewav.sgml b/docs/plugins/tmpl/gstparsewav.sgml
new file mode 100644 (file)
index 0000000..5b536e2
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstParseWav
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstreamer-plugins-unused.sgml b/docs/plugins/tmpl/gstreamer-plugins-unused.sgml
new file mode 100644 (file)
index 0000000..d59270a
--- /dev/null
@@ -0,0 +1,7999 @@
+<!-- ##### STRUCT Mpeg2Meta ##### -->
+<para>
+
+</para>
+
+@packet_length: 
+@PES_scrambling_control: 
+@PES_priority: 
+@data_alignment_indicator: 
+@copyright: 
+@original_or_copy: 
+@PTS_DTS_flags: 
+@ESCR_flag: 
+@ES_rate_flag: 
+@DSM_trick_mode_flag: 
+@additional_copy_info_flag: 
+@CRC_flag: 
+@PES_extension_flag: 
+@PES_header_data_length: 
+@PTS: 
+@DTS: 
+@ESCR_base: 
+@ESCR_extension: 
+@ES_rate: 
+@trick_mode_control: 
+
+<!-- ##### FUNCTION create_sector ##### -->
+<para>
+
+</para>
+
+@sector: 
+@pack: 
+@sys_header: 
+@packet_size: 
+@inputbuffer: 
+@type: 
+@buffer_scale: 
+@buffer_size: 
+@buffers: 
+@PTS: 
+@DTS: 
+@timestamps: 
+@which_streams: 
+
+<!-- ##### SECTION ./tmpl/qtables.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION MakeMask ##### -->
+<para>
+
+</para>
+
+@x: 
+@y: 
+@mask: 
+@XIob: 
+
+<!-- ##### FUNCTION SetMem ##### -->
+<para>
+
+</para>
+
+@value: 
+@m1: 
+
+<!-- ##### MACRO DECODE_MAGIC_NUMBER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO T_X11HIQ ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mrclose ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION gst_aviencoder_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO TIMESTAMPS_PTS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_cobin_iterate ##### -->
+<para>
+
+</para>
+
+@cobin: 
+
+<!-- ##### FUNCTION BoundIQuantizeMatrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+<!-- ##### SECTION ./tmpl/bit_allocate.sgml:Title ##### -->
+bit_allocate
+
+
+<!-- ##### FUNCTION gst_spindentity_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO GST_AVIENCODER_MAX_AUDIO_PADS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MPEGNonIntraIQuantize ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@qptr: 
+@qfact: 
+
+<!-- ##### MACRO GRAB_ATTR_VOLUME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MAX_SECTOR_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEG2PLAY_WIDTH ##### -->
+<para>
+
+</para>
+
+@mp: 
+
+<!-- ##### SECTION ./tmpl/size.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dct.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/stamp.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/getvlc.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gdkxvimage.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION BellCoreHInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO T_YUV ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_videosink_dga_init ##### -->
+<para>
+
+</para>
+
+@sink: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/dga.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeMem ##### -->
+<para>
+
+</para>
+
+@width: 
+@height: 
+@Returns: 
+
+<!-- ##### MACRO STREAM_UNDERFLOW ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/itype.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/uncouple.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION zeroflush ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION stats_print_syncinfo ##### -->
+<para>
+
+</para>
+
+@syncinfo: 
+
+<!-- ##### FUNCTION YUVLoadMem ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO EXTENSION_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_riff_get_chunk_list ##### -->
+<para>
+
+</para>
+
+@riff: 
+@Returns: 
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_MEM ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### SECTION Pads ##### -->
+<refsect1>
+ <title>pads</title>
+ <para>
+   test
+ </para>
+</refsect1>
+
+
+<!-- ##### SECTION ./tmpl/imdct.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BufferContents ##### -->
+<para>
+
+</para>
+
+@vs: 
+
+<!-- ##### MACRO P ##### -->
+<para>
+
+</para>
+
+@s: 
+
+<!-- ##### SECTION ./tmpl/marker.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/parse.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO WHEREAMI ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TOP_FIELD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SetPointerBlock ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEQ_END_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION CECASVInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO MAX_FLIP_BUFFERS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION JVCVInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/decoders.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION mpeg1encoder_new_encoder ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION gst_parseau_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/globals.sgml:Title ##### -->
+globals
+
+
+<!-- ##### FUNCTION ReferenceDct ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@newmatrix: 
+
+<!-- ##### MACRO MB_PATTERN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DHUFF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_volume_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO IC_THREE_EIGHTHS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SYSTEM_START_CODE_MIN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO UDSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mpg123.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BUFFER_TYPE_VIDEO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEEK_SET ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mwtell ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### FUNCTION mwopen ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@filename: 
+
+<!-- ##### SECTION ./tmpl/jdw.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/common.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/csize.sgml:Title ##### -->
+csize
+
+
+<!-- ##### SECTION ./tmpl/mem.sgml:Title ##### -->
+mem
+
+
+<!-- ##### FUNCTION dct64 ##### -->
+<para>
+
+</para>
+
+@dt: 
+@out0: 
+@out1: 
+@samples: 
+
+<!-- ##### MACRO ERROR_READ ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DCTSIZE2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG VCDSrc:bytesperread ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION UDFReadLB ##### -->
+<para>
+
+</para>
+
+@fd: 
+@Returns: 
+
+<!-- ##### MACRO ERROR_PARAMETER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEG1MUX_BUFFER_TYPE ##### -->
+<para>
+
+</para>
+
+@mb: 
+
+<!-- ##### SECTION ./tmpl/RTjpeg.sgml:Title ##### -->
+RTjpeg
+
+
+<!-- ##### MACRO FSTORE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GRAB_ATTR_COLOR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/L3.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mpeg2enc.sgml:Title ##### -->
+mpeg2enc
+
+
+<!-- ##### MACRO LN_TO_LOG10 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gtk_xvimage_new ##### -->
+<para>
+
+</para>
+
+@val: 
+@Returns: 
+
+<!-- ##### MACRO VSSC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_BUFFERSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO WHISPER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/proto.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mrseek ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@distance: 
+
+<!-- ##### MACRO IFF_ID_MPEG ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dvd_udf.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gstriff.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION rematrix ##### -->
+<para>
+
+</para>
+
+@audblk: 
+@coeffs: 
+
+<!-- ##### FUNCTION WritePictureHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### SECTION ./tmpl/buffer.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/bit_allocate.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/csize.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### ARG VCDSrc:location ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ID[4] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SLICE_MIN_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_FVAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CB_FRACTION ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DISPLAY_LOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MEM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION BellCoreVInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION CBPEncodeAC ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@index: 
+@matrix: 
+
+<!-- ##### MACRO GST_PARSEWAV_DATA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_AVIENCODER_MAX_VIDEO_PADS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION imdct ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@audblk_t: 
+@coeffs: 
+@samples: 
+
+<!-- ##### SECTION ./tmpl/tables.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### TYPEDEF sint_8 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FLOAT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MPEGIntraQuantize ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@qptr: 
+@qfact: 
+
+<!-- ##### FUNCTION audio_decode8_info ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### MACRO IFF_ID_SSND ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IQUANT_SCALE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/bitstream.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeStat ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO STATUS_AUDIO_TIME_OUT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_MTYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/tableawd.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEQUENCE_ERROR_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FADE_STARS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ring_buffer.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ReadPictureHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO SYS_HEADER_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_jpegdec_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/putbits.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_MEMORY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ClearMem ##### -->
+<para>
+
+</para>
+
+@m1: 
+
+<!-- ##### FUNCTION CopyBlock ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO LXMIN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/output.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO EHUFF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PANSCAN_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpegaudio_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION WriteStuff ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO ERROR_WRITE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION decode_sanity_check ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MARKER_PTS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO LITTLE_ENDIAN_ARCHITECTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/debug.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION aiff_seek_to_sound_data ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### ARG GstSpindentity:control ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DCT_COEFF_FIRST ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEWAV_CHUNK_DATA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_synth_1to1_mono ##### -->
+<para>
+
+</para>
+
+@fr: 
+@bandPtr: 
+@samples: 
+@pnt: 
+@Returns: 
+
+<!-- ##### MACRO FRAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MAX_U_32_NUM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO T_TGA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpeg1mux_buffer_queue ##### -->
+<para>
+
+</para>
+
+@mb: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/size.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### TYPEDEF DFFT[FFT_SIZE] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpeg1mux_buffer_new ##### -->
+<para>
+
+</para>
+
+@type: 
+@id: 
+@Returns: 
+
+<!-- ##### MACRO MB_QUANT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION CBPDecodeAC ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@index: 
+@matrix: 
+
+<!-- ##### MACRO VIDEO_LUT2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION BoundQuantizeMatrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+<!-- ##### FUNCTION gdk_xvimage_put ##### -->
+<para>
+
+</para>
+
+@window: 
+@gc: 
+@image: 
+@xsrc: 
+@ysrc: 
+@wsrc: 
+@hsrc: 
+@xdest: 
+@ydest: 
+@wdest: 
+@hdest: 
+
+<!-- ##### MACRO VIDEO_LUT4 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IT_QCIF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/core.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO UNPACK_CPL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_median_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION rb_end_read ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION initme ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### SECTION ./tmpl/htable.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION rb_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_aviencoder_make_video_header ##### -->
+<para>
+
+</para>
+
+@codec: 
+@width: 
+@height: 
+@planes: 
+@bit_cnt: 
+@Returns: 
+
+<!-- ##### MACRO VIDEO_RGB16_LE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpegaudio_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO ERROR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SYSTEM_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION parser ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MakeStructure ##### -->
+<para>
+
+</para>
+
+@named_st: 
+
+<!-- ##### SECTION ./tmpl/mpg123.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/jdw.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEWAV_OTHER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_hsstell ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION HPFastBME ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@rx: 
+@ry: 
+@rm: 
+@cx: 
+@cy: 
+@cm: 
+@ox: 
+@oy: 
+
+<!-- ##### MACRO SEQUENCE_HEADER_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF IFFT[FFT_SIZE] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SM0HInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/l2tables.sgml:Title ##### -->
+l2tables
+
+
+<!-- ##### MACRO T_PPM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION audio_decode8_init ##### -->
+<para>
+
+</para>
+
+@h: 
+@framebytes_arg: 
+@reduction_code: 
+@transform_code: 
+@convert_code: 
+@freq_limit: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/grab.sgml:Title ##### -->
+grab
+
+
+<!-- ##### FUNCTION WriteMBHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION ac3dec_imdct_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_spectrum_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gst_mpg123_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION RTjpeg_init_Q ##### -->
+<para>
+
+</para>
+
+@Q: 
+
+<!-- ##### MACRO CHROMA420 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/bitstream.sgml:Title ##### -->
+bitstream
+
+
+<!-- ##### MACRO CHROMA422 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/exponent.sgml:Title ##### -->
+exponent
+
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_BYTE_ORDER ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### TYPEDEF UINT8 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PICTURE_DISPLAY_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gtk_overlay_image_resize ##### -->
+<para>
+
+</para>
+
+@widget: 
+@width: 
+@height: 
+
+<!-- ##### FUNCTION putbits_new_empty_buffer ##### -->
+<para>
+
+</para>
+
+@pb: 
+@len: 
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_DEPTH ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### FUNCTION mpeg1encoder_new_picture ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@data: 
+@size: 
+@state: 
+@Returns: 
+
+<!-- ##### MACRO VIDEO_STR_0 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_IDBD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION debug_is_on ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO CLOCKS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mem_free ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### SECTION ./tmpl/itype.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/uncouple.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/encoder.sgml:Title ##### -->
+encoder
+
+
+<!-- ##### FUNCTION XHInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION readalign ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION mpg123_decode_frame ##### -->
+<para>
+
+</para>
+
+@de: 
+@inbuf: 
+@inlen: 
+@outbuf: 
+@outlen: 
+@Returns: 
+
+<!-- ##### MACRO PSC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SC_SNR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_WIDTH ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### TYPEDEF DFFT2[FFT_SIZE/2] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF WINCOEF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MACRO_BLOCK_ESCAPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mpeg2dec.sgml:Title ##### -->
+mpeg2dec
+
+
+<!-- ##### FUNCTION RTjpeg_yuvrgb16 ##### -->
+<para>
+
+</para>
+
+@buf: 
+@rgb: 
+
+<!-- ##### SECTION ./tmpl/param.sgml:Title ##### -->
+param
+
+
+<!-- ##### SECTION ./tmpl/dither.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_parseavi_winloader_handle ##### -->
+<para>
+
+</para>
+
+@parseavi: 
+@buf: 
+
+<!-- ##### MACRO CONST_BITS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gtk_xvimage_redraw ##### -->
+<para>
+
+</para>
+
+@widget: 
+
+<!-- ##### MACRO ERROR_HUFFMAN_ENCODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/system.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/huffman.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO STAT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FRAME_TYPE_AUDIO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gdkxvimage.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpeg2enc_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/parse.sgml:Title ##### -->
+parse
+
+
+<!-- ##### MACRO NOISY_MIN_MNR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dga.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO IC_ONE_EIGHTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_synaesthesia_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO SPATSCAL_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION VerifyFiles ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION decode_sanity_check_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpeg_play_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/util.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeDCTDCSizeLum ##### -->
+<para>
+
+</para>
+
+@gb: 
+@macro_val: 
+
+<!-- ##### FUNCTION RTjpeg_yuvrgb24 ##### -->
+<para>
+
+</para>
+
+@buf: 
+@rgb: 
+
+<!-- ##### MACRO VIDEO_STREAMS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stats.sgml:Title ##### -->
+stats
+
+
+<!-- ##### MACRO CHROMA444 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeMBTypeB ##### -->
+<para>
+
+</para>
+
+@gb: 
+@quant: 
+@motion_fwd: 
+@motion_bwd: 
+@pat: 
+@intra: 
+
+<!-- ##### SECTION ./tmpl/gtkoverlayimage.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/globals.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO NUM_MASK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_INIT_FILE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/getvlc.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/stamp.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO DecodeMBTypeI ##### -->
+<para>
+
+</para>
+
+@gb: 
+@quant: 
+@motion_fwd: 
+@motion_bwd: 
+@pat: 
+@intra: 
+
+<!-- ##### FUNCTION SM0VDecimateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO M_DECODER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BIG_ENDIAN_ARCHITECTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FUTURE_LOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeMBTypeP ##### -->
+<para>
+
+</para>
+
+@gb: 
+@quant: 
+@motion_fwd: 
+@motion_bwd: 
+@pat: 
+@intra: 
+
+<!-- ##### MACRO PACK_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DVDSRC_BASEOFFSET ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/htable.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_stereo_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO MPEG2PLAY_HEIGHT ##### -->
+<para>
+
+</para>
+
+@mp: 
+
+<!-- ##### MACRO IFF_ID_COMM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MB_BACKWARD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION parse_audblk ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@audblk: 
+@gb: 
+
+<!-- ##### FUNCTION RTjpeg_yuvrgb32 ##### -->
+<para>
+
+</para>
+
+@buf: 
+@rgb: 
+
+<!-- ##### MACRO ESCAPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_BD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO srtell ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO sropen ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/prototypes.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION InterpolativeBME ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### SECTION ./tmpl/rematrix.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO UNIX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPG_MD_STEREO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TABLES_PATH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION Integer2TimeCode ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@fnum: 
+@Returns: 
+
+<!-- ##### FUNCTION SM0VInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION Encode ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@val: 
+@huff: 
+@Returns: 
+
+<!-- ##### MACRO PADDING_STR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MAXIMUM_FGROUP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/util.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_decompress8 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+
+<!-- ##### MACRO MACROBLOCK_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MACROBLOCK_PATTERN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION PrintDhuff ##### -->
+<para>
+
+</para>
+
+@huff: 
+
+<!-- ##### MACRO ISO_END_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION BoundIntegerMatrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+<!-- ##### MACRO FRAME_TYPE_IFRAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PROTO_ARGS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CODING_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_HEIGHT ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### FUNCTION MpegDecodeSequence ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO MPG_MD_MONO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ILBOUND ##### -->
+<para>
+
+</para>
+
+@ptr: 
+@index: 
+@value: 
+
+<!-- ##### SECTION ./tmpl/gtkxvimage.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION mpeg2play_new_decoder ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/l2tables.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO MPG_MD_DUAL_CHANNEL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpegaudio_encode_frame ##### -->
+<para>
+
+</para>
+
+@enc: 
+@inbuf: 
+@outbuf: 
+@outlen: 
+@Returns: 
+
+<!-- ##### FUNCTION mpg123_synth_ntom_set_step ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+
+<!-- ##### FUNCTION XVInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION cvt_to_wave_init ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+
+<!-- ##### FUNCTION ReadFS ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO sgetb ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION WriteBitAlloc ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO sgetc ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF WININT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ac3.sgml:Title ##### -->
+ac3
+
+
+<!-- ##### SECTION ./tmpl/output.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DC_ONE_EIGHTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DFLT_PSY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ac3.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION output_play ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@samples: 
+@Returns: 
+
+<!-- ##### MACRO VERSION ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/l2tables.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO sgetv ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SKIPPED_PICTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_MARKER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION LoadPartialMem ##### -->
+<para>
+
+</para>
+
+@filename: 
+@pwidth: 
+@pheight: 
+@width: 
+@height: 
+@omem: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/musicin.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO IC_QUARTER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION bitstream_done ##### -->
+<para>
+
+</para>
+
+@bs: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/gtkoverlayimage.sgml:Title ##### -->
+GtkOverlayImage
+
+
+<!-- ##### VARIABLE mpg123_conv16to8 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION TransposeMatrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@newmatrix: 
+
+<!-- ##### MACRO GST_PARSEWAV_CHUNK_FMT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STREAMS_VIDEO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO END_OF_BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF uint_8 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FrameRate ##### -->
+<para>
+
+</para>
+
+@vs: 
+
+<!-- ##### MACRO VIDEO_BGR24 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DVDSRC_CLASS ##### -->
+<para>
+
+</para>
+
+@klass: 
+
+<!-- ##### FUNCTION gst_smoothwave_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION gst_median_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO IQUANT_SCALE_POW2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION crc_validate ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### TYPEDEF mb_type_entry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_rewindNbits ##### -->
+<para>
+
+</para>
+
+@fr: 
+@bits: 
+
+<!-- ##### MACRO InBounds ##### -->
+<para>
+
+</para>
+
+@var: 
+@lo: 
+@hi: 
+@str: 
+
+<!-- ##### FUNCTION mpg123_init_decode_tables ##### -->
+<para>
+
+</para>
+
+@de: 
+@scale: 
+
+<!-- ##### FUNCTION stats_print_audblk ##### -->
+<para>
+
+</para>
+
+@audblk: 
+
+<!-- ##### FUNCTION mpg123_compute_bpf ##### -->
+<para>
+
+</para>
+
+@fr: 
+@Returns: 
+
+<!-- ##### FUNCTION head_info2 ##### -->
+<para>
+
+</para>
+
+@buf: 
+@n: 
+@h: 
+@br: 
+@Returns: 
+
+<!-- ##### FUNCTION head_info3 ##### -->
+<para>
+
+</para>
+
+@buf: 
+@n: 
+@h: 
+@br: 
+@searchForward: 
+@Returns: 
+
+<!-- ##### FUNCTION WriteScale ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mem.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO CHARBOUND ##### -->
+<para>
+
+</para>
+
+@value: 
+
+<!-- ##### MACRO TONE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_BGR32 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PACKET_HEADER_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/downmix.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO MAC_WINDOW_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeBlock ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO DEFAULT_QUANTIZATION ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/config.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION SaveMem ##### -->
+<para>
+
+</para>
+
+@filename: 
+@mem: 
+@Returns: 
+
+<!-- ##### FUNCTION gdk_xvimage_check_xvideo ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### ENUM DVDSrcFlags ##### -->
+<para>
+
+</para>
+
+@DVDSRC_OPEN: 
+
+<!-- ##### SECTION ./tmpl/mantissa.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION dprintf ##### -->
+<para>
+
+</para>
+
+@fmt: 
+@Varargs: 
+
+<!-- ##### SECTION ./tmpl/marker.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION mpeg2enc_new_encoder ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO SIXTYFOUR_BIT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION PrintEhuff ##### -->
+<para>
+
+</para>
+
+@huff: 
+
+<!-- ##### MACRO L_PTYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF DCTELEM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mpeg2enc.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ChenIDct ##### -->
+<para>
+
+</para>
+
+@x: 
+@y: 
+
+<!-- ##### SECTION ./tmpl/stream.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION gst_riff_id_to_fourcc ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+<!-- ##### MACRO BLOCKSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/crc.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MAX_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mputb ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@b: 
+
+<!-- ##### FUNCTION gst_windec_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/decode.sgml:Title ##### -->
+decode
+
+
+<!-- ##### MACRO MPEG2_PACKHEAD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DFLT_EMP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DCTBITS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/video.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/common.sgml:Title ##### -->
+common
+
+
+<!-- ##### MACRO UDSC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEAVI_UNKNOWN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/decoders.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION PrintFrame ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO FAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO OK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SLICE_MAX_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mputv ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@n: 
+@b: 
+
+<!-- ##### MACRO PAST_LOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mhead.sgml:Title ##### -->
+mhead
+
+
+<!-- ##### SECTION ./tmpl/param.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION bitcount ##### -->
+<para>
+
+</para>
+
+@pb: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/port.sgml:Title ##### -->
+port
+
+
+<!-- ##### MACRO P_INTRA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mantissa.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MACROBLOCK_MOTION_BACKWARD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VSEC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION create_pack ##### -->
+<para>
+
+</para>
+
+@pack: 
+@SCR: 
+@mux_rate: 
+
+<!-- ##### SECTION ./tmpl/tableawd.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_videosink_pull ##### -->
+<para>
+
+</para>
+
+@pad: 
+@Returns: 
+
+<!-- ##### MACRO MPEG1MUX_BUFFER_SPACE ##### -->
+<para>
+
+</para>
+
+@mb: 
+
+<!-- ##### MACRO PI ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/jdw.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/stats.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BLOCKHEIGHT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_xing_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION ReadBlock ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@store: 
+
+<!-- ##### MACRO GOP_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/tables.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO AFTER_PACKET_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FILETYPE_ENCODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STEREO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SCALE_RANGE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IOBUF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MpegDecodeIPBDFrame ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION mpg123_huffman_count1 ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+@Param2: 
+
+<!-- ##### MACRO L_BDBD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GRAB_ATTR_MODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION JP0VDecimateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO ISO11172_END ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NOISE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT GstParseWavFormat ##### -->
+<para>
+
+</para>
+
+@wFormatTag: 
+@wChannels: 
+@dwSamplesPerSec: 
+@dwAvgBytesPerSec: 
+@wBlockAlign: 
+@wBitsPerSample: 
+
+<!-- ##### MACRO VIDEO_YUV420P ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_MQUANT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dvd_udf.sgml:Title ##### -->
+dvd_udf
+
+
+<!-- ##### MACRO DecodeDCTCoeff ##### -->
+<para>
+
+</para>
+
+@gb: 
+@dct_coeff_tbl: 
+@run: 
+@level: 
+
+<!-- ##### SECTION ./tmpl/RTjpeg.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF sint_16 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ReadMBSHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO ALL_LAYERS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO I_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION Sub2Compensate ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@matrix: 
+@XIob: 
+@YIob: 
+
+<!-- ##### MACRO VSEC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/qtables.sgml:Title ##### -->
+qtables
+
+
+<!-- ##### FUNCTION gtk_overlay_image_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO NOISY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gtk_xvimage_get ##### -->
+<para>
+
+</para>
+
+@image: 
+@val: 
+
+<!-- ##### MACRO SEQUENCE_DISPLAY_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ParityMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION SubCompensate ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@matrix: 
+@XIob: 
+
+<!-- ##### SECTION ./tmpl/musicin.sgml:Title ##### -->
+musicin
+
+
+<!-- ##### FUNCTION LoadMem ##### -->
+<para>
+
+</para>
+
+@filename: 
+@width: 
+@height: 
+@omem: 
+@Returns: 
+
+<!-- ##### MACRO SEQUENCE_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MACRO_BLOCK_STUFFING ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CRC16_POLYNOMIAL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ASM_X86_OLD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TEMPSCAL_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/acconfig.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ASCII ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/size.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_QOFFS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BUFFER_TYPE_AUDIO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION InstallIob ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@index: 
+
+<!-- ##### MACRO SKIP_PICTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dither.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION parse_bsi ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@gb: 
+
+<!-- ##### MACRO BOTTOM_FIELD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ChenDct ##### -->
+<para>
+
+</para>
+
+@x: 
+@y: 
+
+<!-- ##### MACRO MC_FRAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION audio_decode_info ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### FUNCTION MPEGIntraIQuantize ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@qptr: 
+@qfact: 
+
+<!-- ##### TYPEDEF sint_32 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_YUV422P ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO WRITE_IOB ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_set_pointer ##### -->
+<para>
+
+</para>
+
+@fr: 
+@Param2: 
+
+<!-- ##### MACRO PICTURE_SPATIAL_SCALABLE_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TIMESTAMPS_PTS_DTS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeMBAddrInc ##### -->
+<para>
+
+</para>
+
+@gb: 
+@val: 
+
+<!-- ##### MACRO DC_THREE_EIGHTHS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/parse.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_riff_next_buffer ##### -->
+<para>
+
+</para>
+
+@riff: 
+@buf: 
+@off: 
+@Returns: 
+
+<!-- ##### MACRO CONTINUE_BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_smooth_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO HAN_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION WriteMBSHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO DELTA_BIT_NONE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SLICE_START_CODE_MAX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/exponent.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/common.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION mpg123_decode_header ##### -->
+<para>
+
+</para>
+
+@fr: 
+@header: 
+@Returns: 
+
+<!-- ##### MACRO GST_PARSEAVI_MAX_AUDIO_PADS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeDHUFF ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO REGULAR_PARSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mwseek ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@distance: 
+
+<!-- ##### TYPEDEF TimeStamp ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION PrintTable ##### -->
+<para>
+
+</para>
+
+@table: 
+
+<!-- ##### MACRO IN_GOP_PARSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SonyHInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO IN_SEQ_PARSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM GstV4lSrcFlags ##### -->
+<para>
+
+</para>
+
+@GST_V4LSRC_OPEN: 
+
+<!-- ##### FUNCTION dither_gen ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO ERROR_NONE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mwclose ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO SCREAM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT GdkXvImagePrivate ##### -->
+<para>
+
+</para>
+
+@image: 
+@x_shm_info: 
+@im_adaptor: 
+@im_port: 
+@im_format: 
+
+<!-- ##### MACRO BINARY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stats.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO STOP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/musicin.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpeg1encoder_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/ac3.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dct.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF mb_addr_inc_entry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SBLIMIT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION js_bound ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### MACRO GROUP_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_synth_1to1_486 ##### -->
+<para>
+
+</para>
+
+@fr: 
+@bandPtr: 
+@channel: 
+@out: 
+@nb_blocks: 
+@Returns: 
+
+<!-- ##### FUNCTION mpeg2enc_new_picture ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@inbuf: 
+@size: 
+@encoder_state: 
+@Returns: 
+
+<!-- ##### MACRO GRAB_ATTR_HUE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_parsewav_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/huffman.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/system.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/debug.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO USER_DATA_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DefaultDct ##### -->
+<para>
+
+</para>
+
+@vs: 
+@o: 
+@i: 
+
+<!-- ##### MACRO GRAB_ATTR_CONTRAST ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO P_PREDICTED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stream.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEWAV_UNKNOWN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION audio_decode_init ##### -->
+<para>
+
+</para>
+
+@h: 
+@framebytes_arg: 
+@reduction_code: 
+@transform_code: 
+@convert_code: 
+@freq_limit: 
+@Returns: 
+
+<!-- ##### FUNCTION InstallFSIob ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@fs: 
+@index: 
+
+<!-- ##### FUNCTION IZigzagMatrix ##### -->
+<para>
+
+</para>
+
+@imatrix: 
+@omatrix: 
+
+<!-- ##### MACRO GST_PARSEAVI_STRL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MAXFRAMESIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF IFFT2[FFT_SIZE/2] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION WriteVEHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO FADE_HEAT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ENUM VCDSrcFlags ##### -->
+<para>
+
+</para>
+
+@VCDSRC_OPEN: 
+
+<!-- ##### FUNCTION WriteBlock ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@store: 
+
+<!-- ##### SECTION ./tmpl/mpeg2dec.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION stats_print_bsi ##### -->
+<para>
+
+</para>
+
+@bsi: 
+
+<!-- ##### SECTION ./tmpl/rematrix.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_RGB15_BE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO UMASK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_win_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO MARKER_SCR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION audio_decode8 ##### -->
+<para>
+
+</para>
+
+@bs: 
+@pcmbuf: 
+@Returns: 
+
+<!-- ##### FUNCTION ReadVSHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/mem.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeFStore ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO FIRST_BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEAVI_STRH_AUDS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MONO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEAVI_REGULAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_do_layer1 ##### -->
+<para>
+
+</para>
+
+@fr: 
+@Returns: 
+
+<!-- ##### MACRO CAN_AUDIO_VOLUME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_do_layer2 ##### -->
+<para>
+
+</para>
+
+@fr: 
+@Returns: 
+
+<!-- ##### FUNCTION CopyMem ##### -->
+<para>
+
+</para>
+
+@m1: 
+@m2: 
+
+<!-- ##### SECTION ./tmpl/putbits.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_do_layer3 ##### -->
+<para>
+
+</para>
+
+@fr: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/decode.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/globals.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_QDFACT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPG_VER_1 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPG_VER_2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_stereo_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION CopyCFS2FS ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@fs: 
+
+<!-- ##### FUNCTION dvdsrc_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### TYPEDEF UINT16 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_synth_1to1_pent ##### -->
+<para>
+
+</para>
+
+@bandPtr: 
+@channel: 
+@out: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/buffer.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION putbits ##### -->
+<para>
+
+</para>
+
+@pb: 
+@val: 
+@n: 
+
+<!-- ##### FUNCTION MakeEHUFF ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/ctables.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_compress8 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+@Returns: 
+
+<!-- ##### FUNCTION mpeg2play_new_buffer ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@inbuf: 
+@inlen: 
+@first: 
+@Returns: 
+
+<!-- ##### USER_FUNCTION Ifunc ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION RTjpeg_set_test ##### -->
+<para>
+
+</para>
+
+@i: 
+
+<!-- ##### MACRO MB_WEIGHT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DVD_UDF_VERSION ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION cvt_to_wave ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+@Returns: 
+
+<!-- ##### FUNCTION SonyVInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO DVDSRC ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### MACRO FRAME_PICTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DELTA_BIT_RESERVED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpeg2enc_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION MakeSubMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION bitstream_get ##### -->
+<para>
+
+</para>
+
+@bs: 
+@num_bits: 
+@Returns: 
+
+<!-- ##### MACRO GST_PARSEAVI_MAX_VIDEO_PADS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SYNA_BITS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PACK_START ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GRAB_ATTR_BRIGHT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO EXT_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DFLT_EXT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gdkxvimage.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO IMAGE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO LITTLE_SHORT16 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF UINT32 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stats.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_volume_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/imdct.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO STDC_HEADERS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/vlc.sgml:Title ##### -->
+vlc
+
+
+<!-- ##### FUNCTION seof ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### MACRO GST_PARSEAVI_AVIH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_BOUNDS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ctables.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF coded_block_pattern_entry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MB_CLASS4 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ZERO_STUFFING_BYTE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION new_ext ##### -->
+<para>
+
+</para>
+
+@filename: 
+@extname: 
+@Returns: 
+
+<!-- ##### MACRO STATUS_VIDEO_TIME_OUT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PI64 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IFF_LONG ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEGVER1 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEGVER2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DELTA_BIT_REUSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION extended_to_double ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+
+<!-- ##### MACRO GOP_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_get_songlen ##### -->
+<para>
+
+</para>
+
+@fr: 
+@no: 
+@Returns: 
+
+<!-- ##### MACRO MPG_LAYER_1 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/putbits.sgml:Title ##### -->
+putbits
+
+
+<!-- ##### MACRO MPG_LAYER_2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPG_LAYER_3 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF vFunc() ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/system.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/huffman.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO AUDIO_STR_0 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/itype.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/uncouple.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SLICE_START_CODE_MIN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_mcompress8 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+@lmask: 
+@Returns: 
+
+<!-- ##### TYPEDEF VLCtab ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CREATOR_ENCODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION putbits_init ##### -->
+<para>
+
+</para>
+
+@pb: 
+
+<!-- ##### MACRO UNPACK_FBW ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/marker.sgml:Title ##### -->
+marker
+
+
+<!-- ##### SECTION ./tmpl/mpg123.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_GRAY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SC_TEMP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gdk_xvimage_destroy ##### -->
+<para>
+
+</para>
+
+@image: 
+
+<!-- ##### MACRO L_BUFFERCONTENTS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION Bpos ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@hp: 
+@vp: 
+@h: 
+@v: 
+@Returns: 
+
+<!-- ##### MACRO READ_IOB ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mhead.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/output.sgml:Title ##### -->
+output
+
+
+<!-- ##### FUNCTION RTjpeg_init_mcompress ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpeg1mux_buffer_update_queued ##### -->
+<para>
+
+</para>
+
+@mb: 
+@scr: 
+@Returns: 
+
+<!-- ##### MACRO SEQUENCE_SCALABLE_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO swtell ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_FDBD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_riff_get_nextlikely ##### -->
+<para>
+
+</para>
+
+@riff: 
+@Returns: 
+
+<!-- ##### MACRO swopen ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gtkxvimage.sgml:Title ##### -->
+GtkXvImage
+
+
+<!-- ##### MACRO MPEG1MUX_BUFFER_FIRST_TIMECODE ##### -->
+<para>
+
+</para>
+
+@mb: 
+
+<!-- ##### MACRO PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/L3.sgml:Title ##### -->
+L3
+
+
+<!-- ##### FUNCTION vcdsrc_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/gtkxvimage.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF uint_16 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT Mpeg1Stream ##### -->
+<para>
+
+</para>
+
+@stream_id: 
+@STD_buffer_bound_scale: 
+@STD_buffer_size_bound: 
+
+<!-- ##### FUNCTION MakeFrame ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO MPEG2_SYSHEAD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF D2SBL[2][SBLIMIT] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_parseavi_winloader_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/dga.sgml:Title ##### -->
+dga
+
+
+<!-- ##### MACRO LAST ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_VAROR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VOL_REF_NUM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PATH_SEPARATOR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ClearFS ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO GST_PARSEAVI_MOVI ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION seek_sync ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO NO_STARTCODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG VCDSrc:offset ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO USER_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF GdkXvImageType ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SC_DP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DC_QUARTER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO srseek ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_YUV422 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MC_FIELD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VCD_BYTES_PER_SECTOR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION create_sys_header ##### -->
+<para>
+
+</para>
+
+@sys_header: 
+@rate_bound: 
+@audio_bound: 
+@fixed: 
+@CSPS: 
+@audio_lock: 
+@video_lock: 
+@video_bound: 
+@stream1: 
+@buffer1_scale: 
+@buffer1_size: 
+@stream2: 
+@buffer2_scale: 
+@buffer2_size: 
+@which_streams: 
+
+<!-- ##### SECTION ./tmpl/RTjpeg.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION II_CRC_calc ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### SECTION ./tmpl/vlc.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO HBLKSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEAVI_STRH_VIDS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_win_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION WriteSamples ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+
+<!-- ##### SECTION ./tmpl/dct.sgml:Title ##### -->
+dct
+
+
+<!-- ##### FUNCTION rb_begin_write ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO NEW_DATA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF uint_32 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SC_NONE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION downmix ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+
+<!-- ##### MACRO POWERNORM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DBMIN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gstriff.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SLICE_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO UBOUND ##### -->
+<para>
+
+</para>
+
+@index: 
+@value: 
+
+<!-- ##### TYPEDEF frame_params ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STREAMS_AUDIO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/itype.sgml:Title ##### -->
+itype
+
+
+<!-- ##### SECTION ./tmpl/uncouple.sgml:Title ##### -->
+uncouple
+
+
+<!-- ##### MACRO RUN_SHIFT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION LoadFGroup ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@index: 
+
+<!-- ##### FUNCTION gst_mpeg_play_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO USER_BUF_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION set_mac_file_attr ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/encoder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/marker.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_parseavi_get_video_srcpad ##### -->
+<para>
+
+</para>
+
+@parseavi: 
+@pad_nr: 
+@strf: 
+@Returns: 
+
+<!-- ##### MACRO srclose ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION memcheck ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Varargs: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### STRUCT Mpeg1MuxTimecode ##### -->
+<para>
+
+</para>
+
+@length: 
+@original_length: 
+@frame_type: 
+@PTS: 
+@DTS: 
+
+<!-- ##### MACRO MB_ESCAPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VSSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MPEGNonIntraQuantize ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@qptr: 
+@qfact: 
+
+<!-- ##### FUNCTION Decode ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@huff: 
+@Returns: 
+
+<!-- ##### MACRO MPEG_AUDIO_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DFLT_MOD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/main.sgml:Title ##### -->
+main
+
+
+<!-- ##### FUNCTION MakeSuperMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/crc.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BUFFERSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION audio_decode ##### -->
+<para>
+
+</para>
+
+@bs: 
+@pcm: 
+@Returns: 
+
+<!-- ##### MACRO LOGBLKSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/video.sgml:Title ##### -->
+video
+
+
+<!-- ##### SECTION ./tmpl/mpeg2dec.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/rematrix.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO MB_FORWARD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/video.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_RGB15_LE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION WriteHdr ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+
+<!-- ##### FUNCTION mpg123_init_conv16to8_table ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION crc_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STATUS_AUDIO_END ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/encoder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_RIFF_ENOTRIFF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STATUS_VIDEO_END ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_init_decompress ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SYS_HEADER_START ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mem.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mantissa.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeFS ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@flag: 
+
+<!-- ##### FUNCTION RTjpeg_decompressYUV420 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+
+<!-- ##### MACRO FFT_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION hdr_to_frps ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### FUNCTION RTjpeg_decompressYUV422 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+
+<!-- ##### FUNCTION gst_riff_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION bitstream_close ##### -->
+<para>
+
+</para>
+
+@bs: 
+
+<!-- ##### MACRO READ_MODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION parse_auxdata ##### -->
+<para>
+
+</para>
+
+@syncinfo: 
+@gb: 
+
+<!-- ##### MACRO MBSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEG1MUX_BUFFER_DATA ##### -->
+<para>
+
+</para>
+
+@mb: 
+
+<!-- ##### TYPEDEF uint_64 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CBANDS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION I_CRC_calc ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### MACRO EXSC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_vumeter_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO VIDEO_ELEMENTARY_STREAM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GOPSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/prototypes.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/imdct.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO LAST_SCR_BYTE_IN_PACK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/bitstream.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/qtables.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ctables.sgml:Title ##### -->
+ctables
+
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_PIXEL_SIZE ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### FUNCTION gst_v4lsrc_push ##### -->
+<para>
+
+</para>
+
+@src: 
+
+<!-- ##### MACRO STREAMS_BOTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ZIG_ZAG ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SC_SPAT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_compressYUV420 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+@Returns: 
+
+<!-- ##### FUNCTION RTjpeg_compressYUV422 ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+@Returns: 
+
+<!-- ##### MACRO DFLT_SFQ ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO T_SIF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO QUANT_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stream.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION cvt_to_wave_test ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION gst_mpeg2play_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/tables.sgml:Title ##### -->
+tables
+
+
+<!-- ##### FUNCTION bit_allocate ##### -->
+<para>
+
+</para>
+
+@fscod: 
+@bsi: 
+@audblk: 
+
+<!-- ##### FUNCTION WriteFS ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO RING_BUF_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERRC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/crc.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION MakeFGroup ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### SECTION ./tmpl/stream.sgml:Title ##### -->
+stream
+
+
+<!-- ##### SECTION ./tmpl/parse.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION mpg123_synth_1to1 ##### -->
+<para>
+
+</para>
+
+@fr: 
+@bandPtr: 
+@channel: 
+@out: 
+@pnt: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/vlc.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BLKSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ctables.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO MPEG1MUX_BUFFER_QUEUED ##### -->
+<para>
+
+</para>
+
+@mb: 
+
+<!-- ##### SECTION ./tmpl/common.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION update_CRC ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+@Param3: 
+
+<!-- ##### SECTION ./tmpl/port.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/main.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEGVER25 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MARKER_JUST_PTS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gstriff.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MARKER_NO_TIMESTAMPS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MACROBLOCK_MOTION_FORWARD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mpeg2enc.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/output.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_head_check ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### MACRO PACKAGE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION CreateFrameSizes ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO MV_FRAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/l2tables.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION PrintImage ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION gst_mpg123_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/globals.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF JSBS[3][SCALE_BLOCK][SBLIMIT] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TRAP ##### -->
+<para>
+
+</para>
+
+@txt: 
+
+<!-- ##### MACRO BITS_IN_A_BYTE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpeg1mux_buffer_shrink ##### -->
+<para>
+
+</para>
+
+@mb: 
+@size: 
+
+<!-- ##### FUNCTION bitstream_open ##### -->
+<para>
+
+</para>
+
+@file: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/size.sgml:Title ##### -->
+size
+
+
+<!-- ##### FUNCTION gst_example_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION gst_smoothwave_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO KB_OK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO sputc ##### -->
+<para>
+
+</para>
+
+@b: 
+
+<!-- ##### SECTION ./tmpl/grab.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG VCDSrc:track ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PARSE_OK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FRAME_TYPE_BFRAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEG2PLAY_FORMAT ##### -->
+<para>
+
+</para>
+
+@mp: 
+
+<!-- ##### MACRO DCT_COEFF_NEXT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_MARKER_STRUCTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_vumeter_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO WINBITS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO sputv ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DCTSATURATE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VCDSRC ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### MACRO GTK_OVERLAY_IMAGE_TYPE ##### -->
+<para>
+
+</para>
+
+@obj: 
+
+<!-- ##### MACRO TYPE_FORMAT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mhead.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gtkxvimage.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/musicin.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO WRITE_MODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ClearToHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### MACRO IT_NTSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BoundValue ##### -->
+<para>
+
+</para>
+
+@var: 
+@lo: 
+@hi: 
+@str: 
+
+<!-- ##### MACRO DCTSIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ring_buffer.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MACROBLOCK_INTRA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/decode.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ByteAlign ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO MAX_NAME_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeMotionVectors ##### -->
+<para>
+
+</para>
+
+@gb: 
+@value: 
+
+<!-- ##### FUNCTION ZigzagMatrix ##### -->
+<para>
+
+</para>
+
+@imatrix: 
+@omatrix: 
+
+<!-- ##### FUNCTION mantissa_unpack ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@audblk: 
+@gb: 
+
+<!-- ##### FUNCTION BitrateIndex ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/mpeg2enc.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEQUENCE_END_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/tableawd.sgml:Title ##### -->
+tableawd
+
+
+<!-- ##### SECTION ./tmpl/debug.sgml:Title ##### -->
+debug
+
+
+<!-- ##### FUNCTION pick_table ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### FUNCTION gst_parseavi_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION rb_end_write ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MC_DMV ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_PREMATURE_EOF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/proto.sgml:Title ##### -->
+proto
+
+
+<!-- ##### MACRO MINIMUM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/decoders.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/acconfig.sgml:Title ##### -->
+acconfig
+
+
+<!-- ##### MACRO RUN_MASK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IN_SLICE_PARSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SKIP_TO_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gtkoverlayimage.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/RTjpeg.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION read_bit_alloc ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+@Param2: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/config.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BLOCK_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SCALE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SYS_HEADER_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION TimeCode2Integer ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@tc: 
+@Returns: 
+
+<!-- ##### TYPEDEF IN[2][HAN_SIZE] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO BLOCKWIDTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERRC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_v4lsrc_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/core.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_RGB08 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION OpenTableFile ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### FUNCTION gst_example_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO MUTE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_IVAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION initparser ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gtk_xvimage_set ##### -->
+<para>
+
+</para>
+
+@image: 
+@val: 
+
+<!-- ##### FUNCTION RTjpeg_yuvrgb8 ##### -->
+<para>
+
+</para>
+
+@buf: 
+@rgb: 
+
+<!-- ##### FUNCTION i_audio_decode_info ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### FUNCTION gst_parseavi_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION ReadGOPHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO MARKER_DTS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PI4 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ReadHeaderHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### FUNCTION mrtell ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### MACRO SEQ_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mropen ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@filename: 
+
+<!-- ##### FUNCTION EncodeAC ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@index: 
+@matrix: 
+
+<!-- ##### FUNCTION ReferenceIDct ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@newmatrix: 
+
+<!-- ##### SECTION ./tmpl/main.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_jpeg_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/htable.sgml:Title ##### -->
+htable
+
+
+<!-- ##### SECTION ./tmpl/L3.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO PICTURE_CODING_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MoveTo ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@hp: 
+@vp: 
+@h: 
+@v: 
+
+<!-- ##### SECTION ./tmpl/bit_allocate.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gstriff.sgml:Title ##### -->
+gstriff
+
+
+<!-- ##### FUNCTION WriteVSHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO BS_FORMAT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEEK_END ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/crc.sgml:Title ##### -->
+crc
+
+
+<!-- ##### MACRO PICTURE_START_CODE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MS_DOS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SSLIMIT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/exponent.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/dct.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NUM_ATTR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/downmix.sgml:Title ##### -->
+downmix
+
+
+<!-- ##### SECTION ./tmpl/config.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/video.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION UDFOpenDisc ##### -->
+<para>
+
+</para>
+
+@filename: 
+@Returns: 
+
+<!-- ##### MACRO T_Y_U_V ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_RGB24 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO UNPACK_LFE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MB_QUANTUM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/config.sgml:Title ##### -->
+config
+
+
+<!-- ##### FUNCTION RTjpeg_yuv420rgb ##### -->
+<para>
+
+</para>
+
+@buf: 
+@rgb: 
+
+<!-- ##### FUNCTION gst_parseau_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/bitstream.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STARTCODE_FOUND ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MBSC_LENGTH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION quant_weight_coeff_sum ##### -->
+<para>
+
+</para>
+
+@blk: 
+@i_quant_mat: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/param.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### TYPEDEF dct_dc_size_entry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF motion_vectors_entry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/gdkxvimage.sgml:Title ##### -->
+gdkxvimage
+
+
+<!-- ##### TYPEDEF SAMPLEINT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT GstRiffChunk ##### -->
+<para>
+
+</para>
+
+@offset: 
+@id: 
+@size: 
+
+<!-- ##### TYPEDEF INT16 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION rb_begin_read ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### TYPEDEF SBS[2][3][SCALE_BLOCK][SBLIMIT] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO LEVEL_SHIFT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_RGB32 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION crc_process ##### -->
+<para>
+
+</para>
+
+@data: 
+
+<!-- ##### MACRO SEQSCAL_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION WriteGOPHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO BOOLEAN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO AIX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TIMESTAMPS_NO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF DCTBLOCK[DCTSIZE2] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF iFunc() ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FRAME_TYPE_PFRAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION DecodeAC ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@index: 
+@matrix: 
+
+<!-- ##### MACRO ERROR_HUFFMAN_READ ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION aiff_read_headers ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+@Returns: 
+
+<!-- ##### FUNCTION putbits_new_buffer ##### -->
+<para>
+
+</para>
+
+@pb: 
+@buffer: 
+@len: 
+
+<!-- ##### MACRO GRAB_ATTR_MUTE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION i_audio_decode_init ##### -->
+<para>
+
+</para>
+
+@h: 
+@framebytes_arg: 
+@reduction_code: 
+@transform_code: 
+@convert_code: 
+@freq_limit: 
+@Returns: 
+
+<!-- ##### MACRO GLOBAL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION get_number_of_input_bytes ##### -->
+<para>
+
+</para>
+
+@enc: 
+@Returns: 
+
+<!-- ##### MACRO DFLT_BRT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SM0HDecimateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION EncodeDC ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@coef: 
+@LocalEHuff: 
+
+<!-- ##### MACRO L_RATE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NULL_CHAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF DCTCOEF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO START_BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GetFlag ##### -->
+<para>
+
+</para>
+
+@value: 
+@flag: 
+
+<!-- ##### MACRO MAIN_LEVEL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION inithuff ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION head_info ##### -->
+<para>
+
+</para>
+
+@buf: 
+@n: 
+@h: 
+@Returns: 
+
+<!-- ##### MACRO SLICE_MIN_START ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO B_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/exponent.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IN_PICTURE_PARSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO TALK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SKIP_JUNK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF INT32 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_windec_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### VARIABLE global_prefs ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEEK_CUR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION MakeFileNames ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION mpg123_huffman_decoder ##### -->
+<para>
+
+</para>
+
+@Varargs: 
+@Param2: 
+
+<!-- ##### SECTION ./tmpl/grab.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO IFF_ID_AIFF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/buffer.sgml:Title ##### -->
+buffer
+
+
+<!-- ##### MACRO gst_cobin_destroy ##### -->
+<para>
+
+</para>
+
+@cobin: 
+
+<!-- ##### FUNCTION gst_videosink_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### TYPEDEF INT8 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dga.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_SQUANT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ALIGNING ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gdk_xvimage_new ##### -->
+<para>
+
+</para>
+
+@type: 
+@width: 
+@height: 
+@Returns: 
+
+<!-- ##### MACRO SCALE_BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO FADE_FLAME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF D1408[1408] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NO_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SavePartialMem ##### -->
+<para>
+
+</para>
+
+@filename: 
+@pwidth: 
+@pheight: 
+@mem: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/vlc.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION i_audio_decode ##### -->
+<para>
+
+</para>
+
+@bs: 
+@pcm: 
+@Returns: 
+
+<!-- ##### FUNCTION FreeMem ##### -->
+<para>
+
+</para>
+
+@mem: 
+
+<!-- ##### FUNCTION Add2Compensate ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@matrix: 
+@XIob: 
+@YIob: 
+
+<!-- ##### FUNCTION Statistics ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@RefFS: 
+@NewFS: 
+
+<!-- ##### FUNCTION DecodeDC ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@LocalDHuff: 
+@Returns: 
+
+<!-- ##### FUNCTION gst_riff_get_chunk ##### -->
+<para>
+
+</para>
+
+@riff: 
+@fourcc: 
+@Returns: 
+
+<!-- ##### MACRO RATE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF D9[9] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT Mpeg1MuxBuffer ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@length: 
+@base: 
+@scan_pos: 
+@last_pos: 
+@current_start: 
+@buffer_type: 
+@stream_id: 
+@new_frame: 
+@next_frame_time: 
+
+<!-- ##### MACRO DFLT_LAY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION stats_print_banner ##### -->
+<para>
+
+</para>
+
+@syncinfo: 
+@bsi: 
+
+<!-- ##### MACRO EXP_REUSE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF DCTtab ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_parseavi_get_audio_srcpad ##### -->
+<para>
+
+</para>
+
+@parseavi: 
+@pad_nr: 
+@strf: 
+@Returns: 
+
+<!-- ##### MACRO GLOBAL_GAIN_SCALE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MAX_SNR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STUFFING_BYTE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/qtables.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ClearMatrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+<!-- ##### FUNCTION mpg123_compute_tpf ##### -->
+<para>
+
+</para>
+
+@fr: 
+@Returns: 
+
+<!-- ##### MACRO FADE_WAVE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION PrintMatrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+<!-- ##### MACRO NEW_PICTURE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO QUANT_MATRIX_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MV_FIELD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE Clip ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_xa_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO VIDEO_MJPEG ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/huffman.sgml:Title ##### -->
+huffman
+
+
+<!-- ##### SECTION ./tmpl/system.sgml:Title ##### -->
+system
+
+
+<!-- ##### SECTION ./tmpl/ring_buffer.sgml:Title ##### -->
+ring_buffer
+
+
+<!-- ##### TYPEDEF DSBL[SBLIMIT] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ReadMBHeader ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### MACRO MB_STUFFING ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEQUENCE_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mhead.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION AddCompensate ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@matrix: 
+@XIob: 
+
+<!-- ##### SECTION ./tmpl/tableawd.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION alignbits ##### -->
+<para>
+
+</para>
+
+@pb: 
+
+<!-- ##### MACRO COPYRIGHT_EXTENSION_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeDCTCoeffNext ##### -->
+<para>
+
+</para>
+
+@gb: 
+@runval: 
+@levelval: 
+
+<!-- ##### MACRO SLICE_MAX_START ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_yuv422rgb ##### -->
+<para>
+
+</para>
+
+@buf: 
+@rgb: 
+
+<!-- ##### SECTION ./tmpl/gtkoverlayimage.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SetCCITT ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO LBOUND ##### -->
+<para>
+
+</para>
+
+@index: 
+@value: 
+
+<!-- ##### SECTION ./tmpl/util.sgml:Title ##### -->
+util
+
+
+<!-- ##### FUNCTION PrintIob ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION gst_jpegdec_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO NO_VID_STREAM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/getvlc.sgml:Title ##### -->
+getvlc
+
+
+<!-- ##### SECTION ./tmpl/proto.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/proto.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stamp.sgml:Title ##### -->
+stamp
+
+
+<!-- ##### MACRO IT_CIF ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mgetb ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/prototypes.sgml:Title ##### -->
+prototypes
+
+
+<!-- ##### MACRO swseek ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dvd_udf.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SYNA_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_AVIENCODER_INITIAL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_videosink_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION gst_jpeg_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO DVD_VIDEO_LB_LEN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/mpg123.sgml:Title ##### -->
+mpg123
+
+
+<!-- ##### MACRO LEVEL_MASK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mgetv ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@n: 
+@Returns: 
+
+<!-- ##### MACRO MACROBLOCK_QUANT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_smooth_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### FUNCTION RTjpeg_init_compress ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION uncouple ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@audblk: 
+@coeffs: 
+
+<!-- ##### SECTION ./tmpl/core.sgml:Title ##### -->
+core
+
+
+<!-- ##### FUNCTION gst_xa_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO AUDIO_STREAMS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/util.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/encoder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_init_layer1 ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### MACRO VCDSRC_CLASS ##### -->
+<para>
+
+</para>
+
+@klass: 
+
+<!-- ##### MACRO DISP_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION mpg123_init_layer3 ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Varargs: 
+
+<!-- ##### SECTION ./tmpl/port.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT putbits_t ##### -->
+<para>
+
+</para>
+
+@outbfr: 
+@outbase: 
+@temp: 
+@outcnt: 
+@bytecnt: 
+@len: 
+@newlen: 
+
+<!-- ##### SECTION ./tmpl/mpeg2dec.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION read_absthr ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Varargs: 
+
+<!-- ##### FUNCTION MpegEncodeIPBDFrame ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION MakeImage ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION gst_riff_fourcc_to_id ##### -->
+<para>
+
+</para>
+
+@fourcc: 
+@Returns: 
+
+<!-- ##### FUNCTION NumericQ ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### MACRO BEGIN ##### -->
+<para>
+
+</para>
+
+@name: 
+
+<!-- ##### SECTION ./tmpl/mantissa.sgml:Title ##### -->
+mantissa
+
+
+<!-- ##### MACRO GST_AVIENCODER_MOVI ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PROFILE_422 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/grab.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO T_X11 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/csize.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dither.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF D640[640] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO P_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO GST_PARSEAVI_HDRL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/acconfig.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_BVAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ERROR_UNRECOVERABLE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/imdct.sgml:Title ##### -->
+imdct
+
+
+<!-- ##### MACRO P_INTERPOLATED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO EVENT_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_synaesthesia_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### SECTION ./tmpl/param.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPG_MD_JOINT_STEREO ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SuperSubCompensate ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@fmcmatrix: 
+@bmcmatrix: 
+@imcmatrix: 
+@XIob: 
+@YIob: 
+
+<!-- ##### FUNCTION Help ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### MACRO DecodeDCTCoeffFirst ##### -->
+<para>
+
+</para>
+
+@gb: 
+@runval: 
+@levelval: 
+
+<!-- ##### SECTION ./tmpl/L3.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpeg1encoder_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO DELTA_BIT_NEW ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION exponent_unpack ##### -->
+<para>
+
+</para>
+
+@bsi: 
+@audblk: 
+@coeffs: 
+
+<!-- ##### SECTION ./tmpl/decode.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION ReadHeaderTrailer ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION aiff_write_headers ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+@Returns: 
+
+<!-- ##### MACRO LITTLE_ENDIAN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/main.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/htable.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION RTjpeg_mcompress ##### -->
+<para>
+
+</para>
+
+@sp: 
+@bp: 
+@lmask: 
+@cmask: 
+@Returns: 
+
+<!-- ##### MACRO DCT_ERROR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_mpeg2play_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION JP0HDecimateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO SYSTEM_START_CODE_MAX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION SmpFrqIndex ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Returns: 
+
+<!-- ##### MACRO EXSC ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IFF_ID_FORM ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO AUSHIFT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEQ_ID ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO HUFFMAN_ESCAPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/csize.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO EXP_D15 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gdk_xvimage_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/getvlc.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/stamp.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO COEFFSUM_SCALE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/ring_buffer.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### STRUCT Mpeg1Meta ##### -->
+<para>
+
+</para>
+
+@packet_length: 
+@PES_scrambling_control: 
+@PES_priority: 
+@data_alignment_indicator: 
+@copyright: 
+@original_or_copy: 
+@PTS_DTS_flags: 
+@ESCR_flag: 
+@ES_rate_flag: 
+@DSM_trick_mode_flag: 
+@additional_copy_info_flag: 
+@CRC_flag: 
+@PES_extension_flag: 
+@PES_header_data_length: 
+@PTS: 
+@DTS: 
+@ESCR_base: 
+@ESCR_extension: 
+@ES_rate: 
+@trick_mode_control: 
+
+<!-- ##### FUNCTION gst_spectrum_chain ##### -->
+<para>
+
+</para>
+
+@pad: 
+@buf: 
+
+<!-- ##### MACRO PACKET_START ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT GdkXvImage ##### -->
+<para>
+
+</para>
+
+@type: 
+@byte_order: 
+@width: 
+@height: 
+@depth: 
+@bpp: 
+@bpl: 
+@mem: 
+
+<!-- ##### MACRO EXT_BUF_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION double_to_extended ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+
+<!-- ##### SECTION ./tmpl/rematrix.sgml:Title ##### -->
+rematrix
+
+
+<!-- ##### MACRO FINISHED_BLOCK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT GstRiff ##### -->
+<para>
+
+</para>
+
+@form: 
+@chunks: 
+@state: 
+@curoffset: 
+@nextlikely: 
+
+<!-- ##### TYPEDEF SUB[2][3][SCALE_BLOCK][SBLIMIT] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IUBOUND ##### -->
+<para>
+
+</para>
+
+@ptr: 
+@index: 
+@value: 
+
+<!-- ##### MACRO EXP_D25 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO P_FORBIDDEN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_parsewav_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### MACRO inline ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/prototypes.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO MAXIMUM_SOURCES ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO D_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION dct64_486 ##### -->
+<para>
+
+</para>
+
+@a: 
+@b: 
+@samples: 
+
+<!-- ##### MACRO DefaultIDct ##### -->
+<para>
+
+</para>
+
+@vs: 
+@o: 
+@i: 
+
+<!-- ##### MACRO MB_INTRA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_xing_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION mpg123_bpf_from_header ##### -->
+<para>
+
+</para>
+
+@header: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/ac3.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/decoders.sgml:Title ##### -->
+decoders
+
+
+<!-- ##### MACRO WINMULT ##### -->
+<para>
+
+</para>
+
+@x: 
+@coef: 
+
+<!-- ##### FUNCTION YUVSaveMem ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO RESERVED_BYTE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_riff_get_chunk_number ##### -->
+<para>
+
+</para>
+
+@riff: 
+@number: 
+@Returns: 
+
+<!-- ##### MACRO P_DCINTRA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/downmix.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/debug.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PICTURE_LAYER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF D10[10] ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO swclose ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/core.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO PACK_HEADER_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/putbits.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION parse_syncinfo ##### -->
+<para>
+
+</para>
+
+@syncinfo: 
+@gb: 
+
+<!-- ##### SECTION ./tmpl/dither.sgml:Title ##### -->
+dither
+
+
+<!-- ##### FUNCTION CECASHInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION JVCHInterpolateMem ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### MACRO BUFFER_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/port.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO EXP_D45 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeDCTDCSizeChrom ##### -->
+<para>
+
+</para>
+
+@gb: 
+@macro_val: 
+
+<!-- ##### SECTION ./tmpl/bit_allocate.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### MACRO WORD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO VIDEO_RGB16_BE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION gst_cobin_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION convertRGBtoYUV ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@source: 
+@dest: 
+
+<!-- ##### MACRO MC_16X8 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEGTABENV ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/jdw.sgml:Title ##### -->
+jdw
+
+
+<!-- ##### FUNCTION InitFS ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+
+<!-- ##### FUNCTION gst_spindentity_new ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+<!-- ##### SECTION ./tmpl/buffer.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/acconfig.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/tables.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/dvd_udf.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### FUNCTION BruteMotionEstimation ##### -->
+<para>
+
+</para>
+
+@vid_stream: 
+@pmem: 
+@fmem: 
+
+<!-- ##### MACRO MPG_VER_25 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEGLAYER1 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO L_DVAR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO MPEGLAYER2 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DecodeCBP ##### -->
+<para>
+
+</para>
+
+@gb: 
+@coded_bp: 
+
+<!-- ##### MACRO MPEGLAYER3 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/downmix.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
diff --git a/docs/plugins/tmpl/gstspectrum.sgml b/docs/plugins/tmpl/gstspectrum.sgml
new file mode 100644 (file)
index 0000000..feebe84
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+GstSpectrum
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSpectrum:width ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstv4lsrc.sgml b/docs/plugins/tmpl/gstv4lsrc.sgml
new file mode 100644 (file)
index 0000000..cece4f3
--- /dev/null
@@ -0,0 +1,86 @@
+<!-- ##### SECTION Title ##### -->
+GstV4lSrc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:width ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:height ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:format ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:tune ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:tuned ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:input ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:norm ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:volume ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:mute ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:mode ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:color ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:bright ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:hue ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstV4lSrc:contrast ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstwincodec.sgml b/docs/plugins/tmpl/gstwincodec.sgml
new file mode 100644 (file)
index 0000000..8b34fd6
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstWin
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstwindec.sgml b/docs/plugins/tmpl/gstwindec.sgml
new file mode 100644 (file)
index 0000000..b3e9fc4
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+GstWinDec
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstWinDec:avi_header ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstWinDec:bitdepth ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstwinenc.sgml b/docs/plugins/tmpl/gstwinenc.sgml
new file mode 100644 (file)
index 0000000..2a4997b
--- /dev/null
@@ -0,0 +1,49 @@
+<!-- ##### SECTION Title ##### -->
+GstWinEnc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SIGNAL GstWinEnc::frame-encoded ##### -->
+<para>
+
+</para>
+
+@gstwinenc: the object which received the signal.
+@arg1: 
+
+<!-- ##### ARG GstWinEnc:avi_header ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstWinEnc:bitrate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstWinEnc:quality ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstWinEnc:compression ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstWinEnc:last_frame_size ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstxa.sgml b/docs/plugins/tmpl/gstxa.sgml
new file mode 100644 (file)
index 0000000..259ac0a
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstXa
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/gstxing.sgml b/docs/plugins/tmpl/gstxing.sgml
new file mode 100644 (file)
index 0000000..cf9d214
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstXing
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/median.sgml b/docs/plugins/tmpl/median.sgml
new file mode 100644 (file)
index 0000000..aa35882
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+GstMedian
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstMedian:active ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstMedian:filtersize ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/mp1videoparse.sgml b/docs/plugins/tmpl/mp1videoparse.sgml
new file mode 100644 (file)
index 0000000..4e79b5c
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+Mp1VideoParse
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/mp2videoparse.sgml b/docs/plugins/tmpl/mp2videoparse.sgml
new file mode 100644 (file)
index 0000000..fd9d6a8
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+Mp2VideoParse
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/mp3parse.sgml b/docs/plugins/tmpl/mp3parse.sgml
new file mode 100644 (file)
index 0000000..6836a94
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+Mp3Parse
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Mp3Parse:skip ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/mpeg1parse.sgml b/docs/plugins/tmpl/mpeg1parse.sgml
new file mode 100644 (file)
index 0000000..a77682a
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+Mpeg1Parse
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Mpeg1Parse:mux_rate ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/mpeg2parse.sgml b/docs/plugins/tmpl/mpeg2parse.sgml
new file mode 100644 (file)
index 0000000..fafd52e
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+Mpeg2Parse
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Mpeg2Parse:mux_rate ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/mpeg2subt.sgml b/docs/plugins/tmpl/mpeg2subt.sgml
new file mode 100644 (file)
index 0000000..b70dee2
--- /dev/null
@@ -0,0 +1,21 @@
+<!-- ##### SECTION Title ##### -->
+Mpeg2Subt
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Mpeg2Subt:skip ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/rtjpegdec.sgml b/docs/plugins/tmpl/rtjpegdec.sgml
new file mode 100644 (file)
index 0000000..219eaa8
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+RTJpegDec
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/rtjpegenc.sgml b/docs/plugins/tmpl/rtjpegenc.sgml
new file mode 100644 (file)
index 0000000..6b40115
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+RTJpegEnc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/smooth.sgml b/docs/plugins/tmpl/smooth.sgml
new file mode 100644 (file)
index 0000000..f4ee1d3
--- /dev/null
@@ -0,0 +1,31 @@
+<!-- ##### SECTION Title ##### -->
+GstSmooth
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSmooth:active ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSmooth:tolerance ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSmooth:filtersize ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/smoothwave.sgml b/docs/plugins/tmpl/smoothwave.sgml
new file mode 100644 (file)
index 0000000..c9e149c
--- /dev/null
@@ -0,0 +1,31 @@
+<!-- ##### SECTION Title ##### -->
+GstSmoothWave
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSmoothWave:width ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSmoothWave:height ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSmoothWave:widget ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/spindentity.sgml b/docs/plugins/tmpl/spindentity.sgml
new file mode 100644 (file)
index 0000000..58c174a
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+GstSpindentity
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/stereo.sgml b/docs/plugins/tmpl/stereo.sgml
new file mode 100644 (file)
index 0000000..09f343c
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+GstStereo
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstStereo:active ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstStereo:stereo ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/synaesthesia.sgml b/docs/plugins/tmpl/synaesthesia.sgml
new file mode 100644 (file)
index 0000000..ac86656
--- /dev/null
@@ -0,0 +1,31 @@
+<!-- ##### SECTION Title ##### -->
+GstSynaesthesia
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSynaesthesia:width ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSynaesthesia:height ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstSynaesthesia:widget ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/system_encode.sgml b/docs/plugins/tmpl/system_encode.sgml
new file mode 100644 (file)
index 0000000..497a793
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+System_Encode
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG System_Encode:video ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG System_Encode:audio ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/vcdsrc.sgml b/docs/plugins/tmpl/vcdsrc.sgml
new file mode 100644 (file)
index 0000000..b00fc82
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+VCDSrc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/videoscale.sgml b/docs/plugins/tmpl/videoscale.sgml
new file mode 100644 (file)
index 0000000..b3b8699
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+Videoscale
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Videoscale:width ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG Videoscale:height ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/videosink.sgml b/docs/plugins/tmpl/videosink.sgml
new file mode 100644 (file)
index 0000000..0dfafba
--- /dev/null
@@ -0,0 +1,55 @@
+<!-- ##### SECTION Title ##### -->
+GstVideoSink
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SIGNAL GstVideoSink::frame-displayed ##### -->
+<para>
+
+</para>
+
+@gstvideosink: the object which received the signal.
+<!-- # Unused Parameters # -->
+@arg1: 
+
+<!-- ##### ARG GstVideoSink:width ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVideoSink:height ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVideoSink:widget ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVideoSink:frames_displayed ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVideoSink:frame_time ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVideoSink:xv_enabled ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/volume.sgml b/docs/plugins/tmpl/volume.sgml
new file mode 100644 (file)
index 0000000..d285c5c
--- /dev/null
@@ -0,0 +1,26 @@
+<!-- ##### SECTION Title ##### -->
+GstVolume
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVolume:active ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVolume:volume ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/vorbisdec.sgml b/docs/plugins/tmpl/vorbisdec.sgml
new file mode 100644 (file)
index 0000000..37f99b0
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+VorbisDec
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/vorbisenc.sgml b/docs/plugins/tmpl/vorbisenc.sgml
new file mode 100644 (file)
index 0000000..358d634
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- ##### SECTION Title ##### -->
+VorbisEnc
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
diff --git a/docs/plugins/tmpl/vumeter.sgml b/docs/plugins/tmpl/vumeter.sgml
new file mode 100644 (file)
index 0000000..34abf7a
--- /dev/null
@@ -0,0 +1,46 @@
+<!-- ##### SECTION Title ##### -->
+GstVuMeter
+
+<!-- ##### SECTION Short_Description ##### -->
+
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVuMeter:volume ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVuMeter:volumeptr ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVuMeter:volume_left ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVuMeter:volumeptr_left ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVuMeter:volume_right ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG GstVuMeter:volumeptr_right ##### -->
+<para>
+
+</para>
+
index 36b9d010ee989cfeb2096835b21200f11ac5160f..3bb7fab4ba5aba8679ea4f6c1384a3884a994533 100644 (file)
@@ -46,8 +46,8 @@ enum {
   ARG_0,
   ARG_LOCATION,
   ARG_BYTESPERREAD,
-  ARG_LENGTH,
   ARG_OFFSET,
+  ARG_SIZE,
 };
 
 
@@ -101,10 +101,10 @@ gst_asyncdisksrc_class_init(GstAsyncDiskSrcClass *klass) {
                           GTK_ARG_READWRITE, ARG_LOCATION);
   gtk_object_add_arg_type("GstAsyncDiskSrc::bytesperread", GTK_TYPE_INT,
                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
-  gtk_object_add_arg_type("GstAsyncDiskSrc::length", GTK_TYPE_LONG,
-                          GTK_ARG_READABLE, ARG_LENGTH);
   gtk_object_add_arg_type("GstAsyncDiskSrc::offset", GTK_TYPE_LONG,
                           GTK_ARG_READWRITE, ARG_OFFSET);
+  gtk_object_add_arg_type("GstAsyncDiskSrc::size", GTK_TYPE_LONG,
+                          GTK_ARG_READABLE, ARG_SIZE);
 
   gtkobject_class->set_arg = gst_asyncdisksrc_set_arg;
   gtkobject_class->get_arg = gst_asyncdisksrc_get_arg;
@@ -178,12 +178,12 @@ static void gst_asyncdisksrc_get_arg(GtkObject *object,GtkArg *arg,guint id) {
     case ARG_BYTESPERREAD:
       GTK_VALUE_INT(*arg) = src->bytes_per_read;
       break;
-    case ARG_LENGTH:
-      GTK_VALUE_LONG(*arg) = src->size;
-      break;
     case ARG_OFFSET:
       GTK_VALUE_LONG(*arg) = src->curoffset;
       break;
+    case ARG_SIZE:
+      GTK_VALUE_LONG(*arg) = src->size;
+      break;
     default:
       arg->type = GTK_TYPE_INVALID;
       break;
index fb53a829656a95b1c4e38b93d19036e678b390dc..d3674b5320905821077f65d0bc1ec437cc03fd28 100644 (file)
@@ -155,8 +155,7 @@ gst_audiosink_class_init(GstAudioSinkClass *klass) {
   gst_audiosink_signals[SIGNAL_HANDOFF] =
     gtk_signal_new("handoff",GTK_RUN_LAST,gtkobject_class->type,
                    GTK_SIGNAL_OFFSET(GstAudioSinkClass,handoff),
-                   gtk_marshal_NONE__POINTER,GTK_TYPE_NONE,1,
-                   GST_TYPE_AUDIOSINK);
+                   gtk_marshal_NONE__NONE,GTK_TYPE_NONE,0);
   gtk_object_class_add_signals(gtkobject_class,gst_audiosink_signals,
                                LAST_SIGNAL);
 
index ca99a85eb40213e8521b88fa43b4ca4b038a8e87..c5827aa5055e75ee7fb858f8a3ea71fd1009f727 100644 (file)
@@ -42,6 +42,15 @@ GstBufferPool *gst_buffer_pool_new()
   return pool;
 }
 
+/**
+ * gst_buffer_pool_set_create_function:
+ * @pool: the pool to set the create function for
+ * @create: the create function
+ * @user_data: any user data to be passed in the create function
+ *
+ * Sets the function that will be called when a buffer is created 
+ * from this pool.
+ */
 void gst_buffer_pool_set_create_function(GstBufferPool *pool, GstBufferPoolCreateFunction create, gpointer user_data) 
 {
   g_return_if_fail(pool != NULL);
@@ -50,6 +59,15 @@ void gst_buffer_pool_set_create_function(GstBufferPool *pool, GstBufferPoolCreat
   pool->new_user_data = user_data;
 }
 
+/**
+ * gst_buffer_pool_set_destroy_function:
+ * @pool: the pool to set the destroy function for
+ * @destroy: the destroy function
+ * @user_data: any user data to be passed in the create function
+ *
+ * Sets the function that will be called when a buffer is destroyed 
+ * from this pool.
+ */
 void gst_buffer_pool_set_destroy_function(GstBufferPool *pool, GstBufferPoolDestroyFunction destroy, gpointer user_data) 
 {
   g_return_if_fail(pool != NULL);
@@ -58,6 +76,12 @@ void gst_buffer_pool_set_destroy_function(GstBufferPool *pool, GstBufferPoolDest
   pool->destroy_user_data = user_data;
 }
 
+/**
+ * gst_buffer_pool_destroy:
+ * @pool: the pool to destroy
+ *
+ * frees the memory for this bufferpool
+ */
 void gst_buffer_pool_destroy(GstBufferPool *pool) 
 {
   g_return_if_fail(pool != NULL);
@@ -65,6 +89,14 @@ void gst_buffer_pool_destroy(GstBufferPool *pool)
   g_free(pool);
 }
 
+/**
+ * gst_buffer_pool_new_buffer:
+ * @pool: the pool to create the buffer from
+ *
+ * uses the given pool to create a new buffer.
+ *
+ * Returns: The new buffer
+ */
 GstBuffer *gst_buffer_pool_new_buffer(GstBufferPool *pool) 
 {
   GstBuffer *buffer;
@@ -77,6 +109,13 @@ GstBuffer *gst_buffer_pool_new_buffer(GstBufferPool *pool)
   return buffer;
 }
 
+/**
+ * gst_buffer_pool_destroy_buffer:
+ * @pool: the pool to return the buffer to
+ * @buffer: the buffer to return to the pool
+ *
+ * Gives a buffer back to the given pool.
+ */
 void gst_buffer_pool_destroy_buffer(GstBufferPool *pool, GstBuffer *buffer) 
 {
   g_return_if_fail(pool != NULL);
index 38be65cbcd34ebd18677119771688352dd1510ec..1e026150b8218b5860ca85aa705351fe18cef52a 100644 (file)
@@ -85,6 +85,12 @@ GstElement *gst_connection_new(gchar *name) {
   return connection;
 }
 
+/**
+ * gst_connection_push:
+ * @connection: the connection to push
+ *
+ * Push a buffer along a connection
+ */
 void gst_connection_push(GstConnection *connection) {
   GstConnectionClass *oclass;
 
index c2ee86c3e5a9216d1261f3a317a5df74f34b30a9..23fcf7cd02f529c89ce3e219ed46f01b929d04d1 100644 (file)
@@ -55,7 +55,7 @@ void _gst_cpu_initialize(void)
 
 }
 
-guint32 gst_cpu_get_flags(void) 
+GstCPUFlags gst_cpu_get_flags(void) 
 {
   return _gst_cpu_flags;
 }
index e8ebd3ee509e99ef6d8f68aaa0238c1b61fa30fe..c6ee4fb91c641391ad254b9ed3ae1be97de2aa2a 100644 (file)
 
 #include <glib.h>
 
-#define  GST_CPU_FLAG_MMX              (1 << 0)
-#define  GST_CPU_FLAG_SSE              (1 << 1)
+typedef enum {
+  GST_CPU_FLAG_MMX      = (1<<0),
+  GST_CPU_FLAG_SSE      = (1<<1),
+} GstCPUFlags;
 
 void _gst_cpu_initialize();
 
-guint32 gst_cpu_get_flags();
+GstCPUFlags gst_cpu_get_flags();
 
 #endif /* __GST_CPU_H__ */
index 1a3d1ca7b8b26378a56bde2ced6829378d214be1..fa26e66170ece43a3fde14b0e4ae876969052434 100644 (file)
@@ -523,6 +523,8 @@ xmlNodePtr gst_element_save_thyself(GstElement *element,xmlNodePtr parent) {
 /**
  * gst_element_load_thyself:
  * @parent: the xml parent node
+ * @elements: a hashtable to store the elements in. This is used
+ *    to resolve inter element dependecies during the loading.
  *
  * load the element based on the XML description
  *
index a2df7842f48a029dd90ae1b5d1108ca5f4aebff2..2f336100771559d98e7779a6bef2bb2b25b10558 100644 (file)
@@ -72,7 +72,7 @@ static inline char *_gst_print_statename(int state) {
   (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_ELEMENT,GstElementClass))
 #define GST_IS_ELEMENT(obj) \
   (GTK_CHECK_TYPE((obj),GST_TYPE_ELEMENT))
-#define GST_IS_ELEMENT_CLASS(obj) \
+#define GST_IS_ELEMENT_CLASS(klass) \
   (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT))
 
 typedef enum {
index cc841d5108c9935cbc9bbf3f2cbb55e26dcfc469..28afac3698c38004d0a0f7b8b06c9092110c8156 100644 (file)
@@ -77,7 +77,7 @@ GstElementFactory *gst_elementfactory_find(gchar *name) {
  *
  * Get the global list of elementfactories.
  *
- * Returns: <type>GList</type> of type #GstElementFactory
+ * Returns: GList of type #GstElementFactory
  */
 GList *gst_elementfactory_get_list() {
   return _gst_elementfactories;
index 4b9665fda37933a74dbea35595ffe1a9939c64c6..dd259cc0b1665b2210f7afe93a234f47f5dd07e0 100644 (file)
 #include <gst/gsttrace.h>
 
 
+/**
+ * gst_meta_new_size:
+ * @size: the size of the new meta data
+ *
+ * Create a new metadata object with a given size
+ *
+ * Returns: new meta object
+ */
 GstMeta *gst_meta_new_size(gint size) {
   GstMeta *meta;
 
@@ -31,6 +39,12 @@ GstMeta *gst_meta_new_size(gint size) {
   return meta;
 }
 
+/**
+ * gst_meta_ref:
+ * @meta: the meta object to ref
+ *
+ * increases the refcount of a meta object
+ */
 void gst_meta_ref(GstMeta *meta) {
   g_return_if_fail(meta != NULL);
 
@@ -38,6 +52,13 @@ void gst_meta_ref(GstMeta *meta) {
   meta->refcount++;
 }
 
+/**
+ * gst_meta_unref:
+ * @meta: the meta object to unref
+ *
+ * decreases the refcount of a meta object. if the refcount is zero, the
+ * meta object is freed.
+ */
 void gst_meta_unref(GstMeta *meta) {
   g_return_if_fail(meta != NULL);
 
@@ -52,6 +73,15 @@ void gst_meta_unref(GstMeta *meta) {
 }
 
 
+/**
+ * gst_meta_cow:
+ * @meta: the meta object prepare for write
+ *
+ * prepares a meta object for writing. A copy of the meta
+ * object is returned if needed.
+ *
+ * Returns: the meta object or a copy.
+ */
 GstMeta *gst_meta_cow(GstMeta *meta) {
   g_return_val_if_fail(meta != NULL, NULL);
        return NULL;
index 2ba8998afde65a6c70ee6868d9024796cd6d1092..47b33fb03738f8bdca6a4cb64eb589dbaa4bc43b 100644 (file)
@@ -33,8 +33,8 @@ extern "C" {
 #define GST_META(meta) ((GstMeta *)(meta))
 
 
-#define GST_META_FLAGS(buf) \
-  (GST_META(buf)->flags)
+#define GST_META_FLAGS(meta) \
+  (GST_META(meta)->flags)
 #define GST_META_FLAG_IS_SET(meta,flag) \
   (GST_META_FLAGS(meta) & (flag))
 #define GST_META_FLAG_SET(meta,flag) \
index 063a44d2d59b276181a41fca8ba805dfc0ca5af0..f02ae37649f44faa584bb9b01f5b547696dfea26 100644 (file)
@@ -156,6 +156,13 @@ gchar *gst_pad_get_name(GstPad *pad) {
   return pad->name;
 }
 
+/**
+ * gst_pad_set_pull_function:
+ * @pad: the pad to set the pull function for
+ * @pull: the pull function
+ *
+ * Set the given pull function for the pad
+ */
 void gst_pad_set_pull_function(GstPad *pad,GstPadPullFunction pull) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -165,6 +172,13 @@ void gst_pad_set_pull_function(GstPad *pad,GstPadPullFunction pull) {
   pad->pullfunc = pull;
 }
 
+/**
+ * gst_pad_set_chain_function:
+ * @pad: the pad to set the chain function for
+ * @chain: the chain function
+ *
+ * Set the given chain function for the pad
+ */
 void gst_pad_set_chain_function(GstPad *pad,GstPadChainFunction chain) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -172,6 +186,13 @@ void gst_pad_set_chain_function(GstPad *pad,GstPadChainFunction chain) {
   pad->chainfunc = chain;
 }
 
+/**
+ * gst_pad_set_qos_function:
+ * @pad: the pad to set the qos function for
+ * @qos: the qos function
+ *
+ * Set the given qos function for the pad
+ */
 void gst_pad_set_qos_function(GstPad *pad,GstPadQoSFunction qos) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -179,7 +200,13 @@ void gst_pad_set_qos_function(GstPad *pad,GstPadQoSFunction qos) {
   pad->qosfunc = qos;
 }
 
-/* gst_pad_push is handed the src pad and the buffer to push */
+/**
+ * gst_pad_push:
+ * @pad: the pad to push
+ * @buffer: the buffer to push
+ *
+ * pushes a buffer along a src pad
+ */
 void gst_pad_push(GstPad *pad,GstBuffer *buffer) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -206,7 +233,14 @@ void gst_pad_push(GstPad *pad,GstBuffer *buffer) {
 
 }
 
-/* gst_pad_pull() is given the sink pad */
+/**
+ * gst_pad_pull:
+ * @pad: the pad to pull
+ *
+ * pulls a buffer along a sink pad
+ *
+ * Returns: the buffer that was pulled
+ */
 GstBuffer *gst_pad_pull(GstPad *pad) {
   GstBuffer *buf;
 //  GstElement *peerparent;
@@ -246,6 +280,12 @@ GstBuffer *gst_pad_pull(GstPad *pad) {
   return NULL;
 }
 
+/**
+ * gst_pad_chain:
+ * @pad: the pad to chain
+ *
+ * call the chain function of the given pad
+ */
 void gst_pad_chain(GstPad *pad) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -262,6 +302,7 @@ void gst_pad_chain(GstPad *pad) {
  * @pad: the pad to handle the QoS message
  * @qos_message: the QoS message to handle
  *
+ * pass the qos message downstream
  */
 void gst_pad_handle_qos(GstPad *pad,
                       glong qos_message)
@@ -292,6 +333,13 @@ void gst_pad_handle_qos(GstPad *pad,
   return;
 }
 
+/**
+ * gst_pad_disconnect:
+ * @srcpad: the source pad to disconnect
+ * @sinkpad: the sink pad to disconnect
+ *
+ * disconnects the source pad from the sink pad
+ */
 void gst_pad_disconnect(GstPad *srcpad,GstPad *sinkpad) {
 
   /* generic checks */
@@ -313,6 +361,13 @@ void gst_pad_disconnect(GstPad *srcpad,GstPad *sinkpad) {
   srcpad->pullfunc = NULL;
 }
 
+/**
+ * gst_pad_connect:
+ * @srcpad: the source pad to connect
+ * @sinkpad: the sink pad to connect
+ *
+ * connects the source pad to the sink pad
+ */
 void gst_pad_connect(GstPad *srcpad,GstPad *sinkpad) {
   GstPad *temppad;
 
@@ -348,6 +403,13 @@ void gst_pad_connect(GstPad *srcpad,GstPad *sinkpad) {
   /* FIXME: set connected flag */
 }
 
+/**
+ * gst_pad_set_parent:
+ * @pad: the pad to set the parent 
+ * @parent: the object to set the parent to
+ *
+ * sets the parent object of a pad.
+ */
 void gst_pad_set_parent(GstPad *pad,GstObject *parent) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -361,6 +423,13 @@ void gst_pad_set_parent(GstPad *pad,GstObject *parent) {
   pad->parent = parent;
 }
 
+/**
+ * gst_pad_add_ghost_parent:
+ * @pad: the pad to set the ghost parent 
+ * @parent: the object to set the ghost parent to
+ *
+ * add a ghost parent object to a pad.
+ */
 void gst_pad_add_ghost_parent(GstPad *pad,GstObject *parent) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -371,6 +440,13 @@ void gst_pad_add_ghost_parent(GstPad *pad,GstObject *parent) {
 }
 
 
+/**
+ * gst_pad_remove_ghost_parent:
+ * @pad: the pad to remove the ghost parent 
+ * @parent: the object to remove the ghost parent from
+ *
+ * remove a ghost parent object from a pad.
+ */
 void gst_pad_remove_ghost_parent(GstPad *pad,GstObject *parent) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -380,6 +456,14 @@ void gst_pad_remove_ghost_parent(GstPad *pad,GstObject *parent) {
   pad->ghostparents = g_list_remove(pad->ghostparents,parent);
 }
 
+/**
+ * gst_pad_get_parent:
+ * @pad: the pad to get the parent from
+ *
+ * get the parent object of this pad
+ *
+ * Returns: the parent object
+ */
 GstObject *gst_pad_get_parent(GstPad *pad) {
   g_return_val_if_fail(pad != NULL, NULL);
   g_return_val_if_fail(GST_IS_PAD(pad), NULL);
@@ -387,6 +471,14 @@ GstObject *gst_pad_get_parent(GstPad *pad) {
   return pad->parent;
 }
 
+/**
+ * gst_pad_get_ghost_parents:
+ * @pad: the pad to get the ghost parents from
+ *
+ * get the ghost parents of this pad
+ *
+ * Returns: a list of ghost parent objects
+ */
 GList *gst_pad_get_ghost_parents(GstPad *pad) {
   g_return_val_if_fail(pad != NULL, NULL);
   g_return_val_if_fail(GST_IS_PAD(pad), NULL);
@@ -394,6 +486,14 @@ GList *gst_pad_get_ghost_parents(GstPad *pad) {
   return pad->ghostparents;
 }
 
+/**
+ * gst_pad_get_type_id:
+ * @pad: the pad to get the type id from
+ *
+ * get the type of this pad
+ *
+ * Returns: the type of this pad
+ */
 guint16 gst_pad_get_type_id(GstPad *pad) {
   g_return_val_if_fail(pad != NULL, 0);
   g_return_val_if_fail(GST_IS_PAD(pad), 0);
@@ -401,6 +501,13 @@ guint16 gst_pad_get_type_id(GstPad *pad) {
   return pad->type;
 }
 
+/**
+ * gst_pad_set_type_id:
+ * @pad: the pad to set the type id to
+ * @id: the type id to set this pad to
+ *
+ * set the type of this pad
+ */
 void gst_pad_set_type_id(GstPad *pad,guint16 id) {
   g_return_if_fail(pad != NULL);
   g_return_if_fail(GST_IS_PAD(pad));
@@ -409,6 +516,14 @@ void gst_pad_set_type_id(GstPad *pad,guint16 id) {
   pad->type = id;
 }
 
+/**
+ * gst_pad_get_peer:
+ * @pad: the pad to get the peer from
+ *
+ * Get the peer pad of this pad
+ *
+ * Returns: the peer pad
+ */
 GstPad *gst_pad_get_peer(GstPad *pad) {
   g_return_val_if_fail(pad != NULL, NULL);
   g_return_val_if_fail(GST_IS_PAD(pad), NULL);
@@ -428,15 +543,13 @@ static void gst_pad_real_destroy(GtkObject *object) {
 
 
 /**
- * gst_pad_handle_qos:
+ * gst_pad_load_and_connect:
  * @parent: the parent XML node to read the description from
  * @element: the element that has the source pad
  * @elements: a hashtable with elements
  *
  * Read the pad definition from the XML node and connect the given pad
  * in element to a pad of an element in the hashtable.
- *
- * Returns: the new Pad definition.
  */
 void gst_pad_load_and_connect(xmlNodePtr parent, GstObject *element, GHashTable *elements) {
   xmlNodePtr field = parent->childs;
@@ -477,6 +590,15 @@ cleanup:
 }
 
 
+/**
+ * gst_pad_save_thyself:
+ * @pad: the pad to save
+ * @parent: the parent XML node to save the description in
+ *
+ * Saves the pad into an xml representation
+ *
+ * Returns: the xml representation of the pad
+ */
 xmlNodePtr gst_pad_save_thyself(GstPad *pad,xmlNodePtr parent) {
   GstPad *peer;
 
@@ -494,6 +616,16 @@ xmlNodePtr gst_pad_save_thyself(GstPad *pad,xmlNodePtr parent) {
   return parent;
 }
 
+/**
+ * gst_pad_ghost_save_thyself:
+ * @pad: the pad to save
+ * @bin: the bin
+ * @parent: the parent XML node to save the description in
+ *
+ * Saves the ghost pad into an xml representation
+ *
+ * Returns: the xml representation of the pad
+ */
 xmlNodePtr gst_pad_ghost_save_thyself(GstPad *pad,GstElement *bin,xmlNodePtr parent) {
   xmlNodePtr self;
 
index 8ea28be4c9ae05894c93193feede111e3c87f570..171bc596049c4918bc6eafe811abc792d23e1c6b 100644 (file)
@@ -348,6 +348,14 @@ GstElementFactory *gst_plugin_find_elementfactory(gchar *name) {
   return NULL;
 }
 
+/** 
+ * gst_plugin_load_elementfactory:
+ * @name: name of elementfactory to load
+ *
+ * Load a registered elementfactory by name.
+ *
+ * Returns: @GstElementFactory if loaded, NULL if not
+ */
 GstElementFactory *gst_plugin_load_elementfactory(gchar *name) {
   GList *plugins, *factories;
   GstElementFactory *factory = NULL;
@@ -380,6 +388,12 @@ GstElementFactory *gst_plugin_load_elementfactory(gchar *name) {
   return factory;
 }
 
+/** 
+ * gst_plugin_load_typefactory:
+ * @mime: name of typefactory to load
+ *
+ * Load a registered typefactory by mime type.
+ */
 void gst_plugin_load_typefactory(gchar *mime) {
   GList *plugins, *factories;
   GstTypeFactory *factory;
@@ -416,7 +430,7 @@ void gst_plugin_load_typefactory(gchar *mime) {
  * @plugin: plugin to add factory to
  * @factory: factory to add
  *
- * Add factory to the list of those provided by the element.
+ * Add factory to the list of those provided by the plugin.
  */
 void gst_plugin_add_factory(GstPlugin *plugin,GstElementFactory *factory) {
   g_return_if_fail(plugin != NULL);
@@ -426,6 +440,13 @@ void gst_plugin_add_factory(GstPlugin *plugin,GstElementFactory *factory) {
   plugin->elements = g_list_append(plugin->elements,factory);
 }
 
+/**
+ * gst_plugin_add_type:
+ * @plugin: plugin to add type to
+ * @factory: the typefactory to add
+ *
+ * Add a typefactory to the list of those provided by the plugin.
+ */
 void gst_plugin_add_type(GstPlugin *plugin,GstTypeFactory *factory) {
   g_return_if_fail(plugin != NULL);
   g_return_if_fail(factory != NULL);
@@ -445,6 +466,14 @@ GList *gst_plugin_get_list() {
   return _gst_plugins;
 }
 
+/**
+ * gst_plugin_save_thyself:
+ * @parent: the parent node to save the plugin to
+ *
+ * saves the plugin into an XML representation
+ *
+ * Returns: the new XML node
+ */
 xmlNodePtr gst_plugin_save_thyself(xmlNodePtr parent) {
   xmlNodePtr tree, subtree;
   GList *plugins = NULL, *elements = NULL, *types = NULL;
@@ -479,6 +508,12 @@ xmlNodePtr gst_plugin_save_thyself(xmlNodePtr parent) {
   return parent;
 }
 
+/**
+ * gst_plugin_load_thyself:
+ * @parent: the parent node to load the plugin from
+ *
+ * load the plugin from an XML representation
+ */
 void gst_plugin_load_thyself(xmlNodePtr parent) {
   xmlNodePtr kinderen;   
   gint elementcount = 0;
index 2a2cf246b7812beef12946c716f289ba42704bb1..6c2c2b444f514049354d8a3bd4458fd68a1b44a7 100644 (file)
@@ -57,6 +57,7 @@ static void gst_thread_restore_thyself(GstElement *element,xmlNodePtr parent, GH
 static void gst_thread_signal_thread(GstThread *thread);
 static void gst_thread_create_plan_dummy(GstBin *bin);
 
+static void *gst_thread_main_loop(void *arg);
 
 static GstBin *parent_class = NULL;
 //static guint gst_thread_signals[LAST_SIGNAL] = { 0 };
@@ -253,7 +254,7 @@ static GstElementStateReturn gst_thread_change_state(GstElement *element) {
  * The main loop of the thread. The thread will iterate
  * while the state is GST_THREAD_STATE_SPINNING
  */
-void *gst_thread_main_loop(void *arg) {
+static void *gst_thread_main_loop(void *arg) {
   GstThread *thread = GST_THREAD(arg);
 
   gst_info("gstthread: thread \"%s\" is running with PID %d\n",
index ceac92dcdc11052b4906e5f83f6cffc64d5a07c6..bdecf353a30e5b2949db12192454fa53c51f9ce7 100644 (file)
@@ -69,9 +69,6 @@ struct _GstThreadClass {
 GtkType gst_thread_get_type(void);
 GstElement *gst_thread_new(guchar *name);
 
-void *gst_thread_main_loop(void *arg);
-void gst_thread_iterate(GstThread *thread);
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index cc631706fa835d248b3adedd531c1880a9d52ae9..2d2c32ea27185a1add13bb890b380ff977926903 100644 (file)
 
 #include <gtk/gtk.h>
 
+/**
+ * gst_util_get_int_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as an integer
+ *
+ * Returns: the property of the object
+ */
 gint gst_util_get_int_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -28,6 +37,15 @@ gint gst_util_get_int_arg(GtkObject *object,guchar *argname) {
   return GTK_VALUE_INT(arg);
 }
 
+/**
+ * gst_util_get_long_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as a long
+ *
+ * Returns: the property of the object
+ */
 glong gst_util_get_long_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -36,6 +54,15 @@ glong gst_util_get_long_arg(GtkObject *object,guchar *argname) {
   return GTK_VALUE_LONG(arg);
 }
 
+/**
+ * gst_util_get_float_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as a float
+ *
+ * Returns: the property of the object
+ */
 gfloat gst_util_get_float_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -44,6 +71,15 @@ gfloat gst_util_get_float_arg(GtkObject *object,guchar *argname) {
   return GTK_VALUE_FLOAT(arg);
 }
 
+/**
+ * gst_util_get_double_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as a double
+ *
+ * Returns: the property of the object
+ */
 gdouble gst_util_get_double_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -52,6 +88,15 @@ gdouble gst_util_get_double_arg(GtkObject *object,guchar *argname) {
   return GTK_VALUE_DOUBLE(arg);
 }
 
+/**
+ * gst_util_get_string_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as a string
+ *
+ * Returns: the property of the object
+ */
 guchar *gst_util_get_string_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -60,6 +105,15 @@ guchar *gst_util_get_string_arg(GtkObject *object,guchar *argname) {
   return GTK_VALUE_STRING(arg);
 }
 
+/**
+ * gst_util_get_pointer_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as a pointer
+ *
+ * Returns: the property of the object
+ */
 gpointer gst_util_get_pointer_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -68,6 +122,15 @@ gpointer gst_util_get_pointer_arg(GtkObject *object,guchar *argname) {
   return GTK_VALUE_POINTER(arg);
 }
 
+/**
+ * gst_util_get_widget_arg:
+ * @object: the object to query
+ * @argname: the name of the argument
+ *
+ * retrieves a property of an object as a widget
+ *
+ * Returns: the property of the object
+ */
 GtkWidget *gst_util_get_widget_arg(GtkObject *object,guchar *argname) {
   GtkArg arg;
 
@@ -76,6 +139,14 @@ GtkWidget *gst_util_get_widget_arg(GtkObject *object,guchar *argname) {
   return GTK_WIDGET(GTK_VALUE_OBJECT(arg));
 }
 
+/**
+ * gst_util_dump_mem:
+ * @mem: a pointer to the memory to dump
+ * @size: the size of the memory block to dump
+ *
+ * dumps the memory block into a hex representation. usefull
+ * for debugging.
+ */
 void gst_util_dump_mem(guchar *mem, guint size) {
   guint i, j;
 
index 9ad5d763c295fe93abc076f5a2b4c9d44270b2aa..4d702438d7b94cfdc1f2af107bc695a8ddd6b5e9 100644 (file)
@@ -124,7 +124,7 @@ GstXML *gst_xml_new(const guchar *fname, const guchar *root) {
  * @xml: The GstXML to get the element from
  * @name: The name of element to retreive
  *
- * This function is used to get a pointer to the GStElement corresponding 
+ * This function is used to get a pointer to the GstElement corresponding 
  * to name in the pipeline description. You would use this if you have 
  * to do anything to the element after loading.
  *
index 1704d748ffd17c1aa03d8328b4e3e7332787373a..b8b89a97cd13ca43d48035a9670fbbd384a3459f 100644 (file)
 #include "yuv2rgb.h"
 
 typedef enum {
-#define GST_COLORSPACE_RGB_FIRST GST_COLORSPACE_RGB555
   GST_COLORSPACE_RGB555,
   GST_COLORSPACE_BGR555,
   GST_COLORSPACE_RGB565,
   GST_COLORSPACE_BGR565,
-  GST_COLORSPACE_RGB24,                   // RGB
-  GST_COLORSPACE_BGR24,                   // RGB
+  GST_COLORSPACE_RGB24,                 
+  GST_COLORSPACE_BGR24,               
   GST_COLORSPACE_RGB32,
   GST_COLORSPACE_BGR32,
-#define GST_COLORSPACE_RGB_LAST GST_COLORSPACE_BGR32
 
-#define GST_COLORSPACE_YUV_FIRST GST_COLORSPACE_YUV420
-  GST_COLORSPACE_YUV420,                  // YUV 
-  GST_COLORSPACE_YUV420P,                 // YUV planar
+  GST_COLORSPACE_YUV420,              
+  GST_COLORSPACE_YUV420P,           
   GST_COLORSPACE_YUV422,
-  GST_COLORSPACE_YUV422P,
-#define GST_COLORSPACE_YUV_LAST GST_COLORSPACE_YUV422P
+  GST_COLORSPACE_YUV422P
 
 } GstColorSpaceType;
 
+#define GST_COLORSPACE_RGB_FIRST GST_COLORSPACE_RGB555
+#define GST_COLORSPACE_RGB_LAST GST_COLORSPACE_BGR32
+
+#define GST_COLORSPACE_YUV_FIRST GST_COLORSPACE_YUV420
+#define GST_COLORSPACE_YUV_LAST GST_COLORSPACE_YUV422P
+
 typedef struct _GstColorSpaceConverter GstColorSpaceConverter;
 typedef void (*GstColorSpaceConvertFunction) (GstColorSpaceConverter *space, guchar *src, guchar *dest);
 
@@ -67,12 +69,14 @@ struct _GstColorSpaceConverter {
 
 #define GST_COLORSPACE_IS_RGB_TYPE(type) ((type)>=GST_COLORSPACE_RGB_FIRST && \
                                          (type)<=GST_COLORSPACE_RGB_LAST)
+
 #define GST_COLORSPACE_IS_YUV_TYPE(type) ((type)>=GST_COLORSPACE_YUV_FIRST && \
                                          (type)<=GST_COLORSPACE_YUV_LAST)
 
 GstColorSpaceConverter *gst_colorspace_converter_new(gint width, gint height, GstColorSpaceType srcspace, 
                GstColorSpaceType destspace, GdkVisual *destvisual);
-#define gst_colorspace_convert(converter, src, dest) (converter)->convert((converter), (src), (dest))
+#define gst_colorspace_convert(converter, src, dest) \
+                       (converter)->convert((converter), (src), (dest))
 void gst_colorspace_destroy(GstColorSpaceConverter *space);
 
 #endif /* __GST_COLORSPACE_H__ */
index 1d26bf4fa187b6f0c6edf61bdecc25f805d94feb..2e0fd4b0614c4ea7e7a35b128396aa4b0f3e4930 100644 (file)
 #include <glib.h>
 
 typedef enum {
-  GST_IDCT_DEFAULT,         // default 
-  GST_IDCT_INT,                                 // integer IDCT
-  GST_IDCT_FAST_INT,        // fastest integer
-  GST_IDCT_FLOAT,                // accurate float version
-  GST_IDCT_MMX,                            // fast MMX (not accurate)
-  GST_IDCT_MMX32,           // accurate MMX
+  GST_IDCT_DEFAULT,    
+  GST_IDCT_INT,        
+  GST_IDCT_FAST_INT, 
+  GST_IDCT_FLOAT,   
+  GST_IDCT_MMX,        
+  GST_IDCT_MMX32
 } GstIDCTMethod;
 
 typedef struct _GstIDCT GstIDCT;
index 75b96fae14d58ebbab9eb70c4c93a2b40e65f6f7..7d586d6fb5f8dbfca9b2114657e2b9eb419c4fba 100644 (file)
 #include <gst/gstplugin.h>
 
 
-#define GST_RIFF_OK       0            
-#define GST_RIFF_ENOTRIFF -1           /* not a RIFF file */
-#define GST_RIFF_EINVAL   -2           /* wrong parameters */
-#define GST_RIFF_ENOMEM   -3           /* out of memory */
+typedef enum {
+  GST_RIFF_OK      =  0,               
+  GST_RIFF_ENOTRIFF = -1,
+  GST_RIFF_EINVAL   = -2,
+  GST_RIFF_ENOMEM   = -3
+} GstRiffReturn;
 
 /* states */
-#define GST_RIFF_STATE_INITIAL         0
-#define GST_RIFF_STATE_HASAVIH         1
-#define GST_RIFF_STATE_HASSTRH         2
-#define GST_RIFF_STATE_HASSTRF         3
-#define GST_RIFF_STATE_MOVI            4
-
+typedef enum {
+  GST_RIFF_STATE_INITIAL       = 0,
+  GST_RIFF_STATE_HASAVIH       = 1,
+  GST_RIFF_STATE_HASSTRH       = 2,
+  GST_RIFF_STATE_HASSTRF       = 3,
+  GST_RIFF_STATE_MOVI          = 4
+} GstRiffParserState;
 
 #define MAKE_FOUR_CC(a,b,c,d) ( ((guint32)a)     | (((guint32)b)<< 8) | \
                                 ((guint32)c)<<16 | (((guint32)d)<<24) )
@@ -331,7 +334,7 @@ struct _GstRiff {
   GstRiffChunk *incomplete_chunk;
   guint32 incomplete_chunk_size;
   /* parse state */
-  gint state;
+  GstRiffParserState state;
   guint32 curoffset;
   guint32 nextlikely;
   /* leftover data */
@@ -356,14 +359,14 @@ struct _GstRiffChunk {
 
 /* from gstriffparse.c */
 GstRiff *gst_riff_parser_new(GstRiffCallback function, gpointer data);
-gint gst_riff_parser_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off);
+GstRiffReturn gst_riff_parser_next_buffer(GstRiff *riff,GstBuffer *buf,gulong off);
 
 /* from gstriffencode.c */
 GstRiff *gst_riff_encoder_new(guint32 type);
-gint gst_riff_encoder_avih(GstRiff *riff, gst_riff_avih *head, gulong size);
-gint gst_riff_encoder_strh(GstRiff *riff, guint32 fcc_type, gst_riff_strh *head, gulong size);
-gint gst_riff_encoder_strf(GstRiff *riff, void *format, gulong size);
-gint gst_riff_encoder_chunk(GstRiff *riff, guint32 chunk_type, void *chunk, gulong size);
+GstRiffReturn gst_riff_encoder_avih(GstRiff *riff, gst_riff_avih *head, gulong size);
+GstRiffReturn gst_riff_encoder_strh(GstRiff *riff, guint32 fcc_type, gst_riff_strh *head, gulong size);
+GstRiffReturn gst_riff_encoder_strf(GstRiff *riff, void *format, gulong size);
+GstRiffReturn gst_riff_encoder_chunk(GstRiff *riff, guint32 chunk_type, void *chunk, gulong size);
 
 GstBuffer *gst_riff_encoder_get_buffer(GstRiff *riff);
 GstBuffer *gst_riff_encoder_get_and_reset_buffer(GstRiff *riff);
index 36b9d010ee989cfeb2096835b21200f11ac5160f..3bb7fab4ba5aba8679ea4f6c1384a3884a994533 100644 (file)
@@ -46,8 +46,8 @@ enum {
   ARG_0,
   ARG_LOCATION,
   ARG_BYTESPERREAD,
-  ARG_LENGTH,
   ARG_OFFSET,
+  ARG_SIZE,
 };
 
 
@@ -101,10 +101,10 @@ gst_asyncdisksrc_class_init(GstAsyncDiskSrcClass *klass) {
                           GTK_ARG_READWRITE, ARG_LOCATION);
   gtk_object_add_arg_type("GstAsyncDiskSrc::bytesperread", GTK_TYPE_INT,
                           GTK_ARG_READWRITE, ARG_BYTESPERREAD);
-  gtk_object_add_arg_type("GstAsyncDiskSrc::length", GTK_TYPE_LONG,
-                          GTK_ARG_READABLE, ARG_LENGTH);
   gtk_object_add_arg_type("GstAsyncDiskSrc::offset", GTK_TYPE_LONG,
                           GTK_ARG_READWRITE, ARG_OFFSET);
+  gtk_object_add_arg_type("GstAsyncDiskSrc::size", GTK_TYPE_LONG,
+                          GTK_ARG_READABLE, ARG_SIZE);
 
   gtkobject_class->set_arg = gst_asyncdisksrc_set_arg;
   gtkobject_class->get_arg = gst_asyncdisksrc_get_arg;
@@ -178,12 +178,12 @@ static void gst_asyncdisksrc_get_arg(GtkObject *object,GtkArg *arg,guint id) {
     case ARG_BYTESPERREAD:
       GTK_VALUE_INT(*arg) = src->bytes_per_read;
       break;
-    case ARG_LENGTH:
-      GTK_VALUE_LONG(*arg) = src->size;
-      break;
     case ARG_OFFSET:
       GTK_VALUE_LONG(*arg) = src->curoffset;
       break;
+    case ARG_SIZE:
+      GTK_VALUE_LONG(*arg) = src->size;
+      break;
     default:
       arg->type = GTK_TYPE_INVALID;
       break;
index fb53a829656a95b1c4e38b93d19036e678b390dc..d3674b5320905821077f65d0bc1ec437cc03fd28 100644 (file)
@@ -155,8 +155,7 @@ gst_audiosink_class_init(GstAudioSinkClass *klass) {
   gst_audiosink_signals[SIGNAL_HANDOFF] =
     gtk_signal_new("handoff",GTK_RUN_LAST,gtkobject_class->type,
                    GTK_SIGNAL_OFFSET(GstAudioSinkClass,handoff),
-                   gtk_marshal_NONE__POINTER,GTK_TYPE_NONE,1,
-                   GST_TYPE_AUDIOSINK);
+                   gtk_marshal_NONE__NONE,GTK_TYPE_NONE,0);
   gtk_object_class_add_signals(gtkobject_class,gst_audiosink_signals,
                                LAST_SIGNAL);
 
index f5808923ee799abbdfd745de45db519765e6b815..69eac2e47b5e37533686db2456a26e6341bbf778 100644 (file)
@@ -76,7 +76,7 @@ int main(int argc,char *argv[]) {
 //  sleep(1);
   g_print("about to enter loop\n");
   while (1) {
-    gst_thread_main_loop(GST_THREAD(playthread));
+    gst_bin_iterate(GST_BIN(playthread));
     g_print("using %d bytes\n",vmsize());
   }
 
index dd93405efcee99aa7625d486f1474028c9ea942a..6695830c4cc6f8d6ea7a68bf48cca08de7ae13ee 100644 (file)
@@ -93,7 +93,7 @@ int main(int argc,char *argv[]) {
 
   g_print("\niterating on %p and %p\n",decodethread,playthread);
   while (playing) {
-    gst_thread_main_loop(GST_THREAD(playthread));
+    gst_bin_iterate(GST_BIN(playthread));
     /* buffers got wedged in the queue, unstick them */
 //    while (((GstQueue *)queue)->buffers_queued)
 //      gst_connection_push(GST_CONNECTION(queue));