summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.in3
-rw-r--r--docs/plugins/Makefile.am96
-rwxr-xr-xdocs/plugins/gstdoc-mkdb2273
-rwxr-xr-xdocs/plugins/gstdoc-mktmpl1346
-rwxr-xr-xdocs/plugins/gstdoc-scanobj872
-rw-r--r--docs/plugins/gstreamer-plugins-docs.sgml120
-rw-r--r--docs/plugins/gstreamer-plugins-sections.txt333
-rw-r--r--docs/plugins/tmpl/ac3dec.sgml16
-rw-r--r--docs/plugins/tmpl/ac3parse.sgml21
-rw-r--r--docs/plugins/tmpl/audioscale.sgml21
-rw-r--r--docs/plugins/tmpl/cobin.sgml16
-rw-r--r--docs/plugins/tmpl/dvdsrc.sgml16
-rw-r--r--docs/plugins/tmpl/example.sgml16
-rw-r--r--docs/plugins/tmpl/gstaviencoder.sgml26
-rw-r--r--docs/plugins/tmpl/gstjpeg.sgml16
-rw-r--r--docs/plugins/tmpl/gstjpegdec.sgml16
-rw-r--r--docs/plugins/tmpl/gstjpegenc.sgml16
-rw-r--r--docs/plugins/tmpl/gstmpeg1encoder.sgml16
-rw-r--r--docs/plugins/tmpl/gstmpeg2enc.sgml21
-rw-r--r--docs/plugins/tmpl/gstmpeg2play.sgml21
-rw-r--r--docs/plugins/tmpl/gstmpeg_play.sgml24
-rw-r--r--docs/plugins/tmpl/gstmpegaudio.sgml16
-rw-r--r--docs/plugins/tmpl/gstmpg123.sgml16
-rw-r--r--docs/plugins/tmpl/gstparseau.sgml16
-rw-r--r--docs/plugins/tmpl/gstparseavi.sgml16
-rw-r--r--docs/plugins/tmpl/gstparsewav.sgml16
-rw-r--r--docs/plugins/tmpl/gstreamer-plugins-unused.sgml7999
-rw-r--r--docs/plugins/tmpl/gstspectrum.sgml21
-rw-r--r--docs/plugins/tmpl/gstv4lsrc.sgml86
-rw-r--r--docs/plugins/tmpl/gstwincodec.sgml16
-rw-r--r--docs/plugins/tmpl/gstwindec.sgml26
-rw-r--r--docs/plugins/tmpl/gstwinenc.sgml49
-rw-r--r--docs/plugins/tmpl/gstxa.sgml16
-rw-r--r--docs/plugins/tmpl/gstxing.sgml16
-rw-r--r--docs/plugins/tmpl/median.sgml26
-rw-r--r--docs/plugins/tmpl/mp1videoparse.sgml16
-rw-r--r--docs/plugins/tmpl/mp2videoparse.sgml16
-rw-r--r--docs/plugins/tmpl/mp3parse.sgml21
-rw-r--r--docs/plugins/tmpl/mpeg1parse.sgml21
-rw-r--r--docs/plugins/tmpl/mpeg2parse.sgml21
-rw-r--r--docs/plugins/tmpl/mpeg2subt.sgml21
-rw-r--r--docs/plugins/tmpl/rtjpegdec.sgml16
-rw-r--r--docs/plugins/tmpl/rtjpegenc.sgml16
-rw-r--r--docs/plugins/tmpl/smooth.sgml31
-rw-r--r--docs/plugins/tmpl/smoothwave.sgml31
-rw-r--r--docs/plugins/tmpl/spindentity.sgml16
-rw-r--r--docs/plugins/tmpl/stereo.sgml26
-rw-r--r--docs/plugins/tmpl/synaesthesia.sgml31
-rw-r--r--docs/plugins/tmpl/system_encode.sgml26
-rw-r--r--docs/plugins/tmpl/vcdsrc.sgml16
-rw-r--r--docs/plugins/tmpl/videoscale.sgml26
-rw-r--r--docs/plugins/tmpl/videosink.sgml55
-rw-r--r--docs/plugins/tmpl/volume.sgml26
-rw-r--r--docs/plugins/tmpl/vorbisdec.sgml16
-rw-r--r--docs/plugins/tmpl/vorbisenc.sgml16
-rw-r--r--docs/plugins/tmpl/vumeter.sgml46
-rw-r--r--gst/elements/gstasyncdisksrc.c12
-rw-r--r--gst/elements/gstaudiosink.c3
-rw-r--r--gst/gstbufferpool.c39
-rw-r--r--gst/gstconnection.c6
-rw-r--r--gst/gstcpu.c2
-rw-r--r--gst/gstcpu.h8
-rw-r--r--gst/gstelement.c2
-rw-r--r--gst/gstelement.h2
-rw-r--r--gst/gstelementfactory.c2
-rw-r--r--gst/gstmeta.c30
-rw-r--r--gst/gstmeta.h4
-rw-r--r--gst/gstpad.c142
-rw-r--r--gst/gstplugin.c37
-rw-r--r--gst/gstthread.c3
-rw-r--r--gst/gstthread.h3
-rw-r--r--gst/gstutils.c71
-rw-r--r--gst/gstxml.c2
-rw-r--r--libs/colorspace/gstcolorspace.h24
-rw-r--r--libs/idct/gstidct.h12
-rw-r--r--libs/riff/gstriff.h35
-rw-r--r--plugins/elements/gstasyncdisksrc.c12
-rw-r--r--plugins/elements/gstaudiosink.c3
-rw-r--r--test/ac3play.c2
-rw-r--r--test/qtest.c2
80 files changed, 14539 insertions, 69 deletions
diff --git a/configure.in b/configure.in
index e65c6dc23..6d7647361 100644
--- a/configure.in
+++ b/configure.in
@@ -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
index 000000000..e5e1277ff
--- /dev/null
+++ b/docs/plugins/Makefile.am
@@ -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
index 000000000..b8e4dcd9e
--- /dev/null
+++ b/docs/plugins/gstdoc-mkdb
@@ -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
index 000000000..159c30de6
--- /dev/null
+++ b/docs/plugins/gstdoc-mktmpl
@@ -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
index 000000000..6c058216b
--- /dev/null
+++ b/docs/plugins/gstdoc-scanobj
@@ -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
index 000000000..13267f90c
--- /dev/null
+++ b/docs/plugins/gstreamer-plugins-docs.sgml
@@ -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
index 000000000..699abdd9c
--- /dev/null
+++ b/docs/plugins/gstreamer-plugins-sections.txt
@@ -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
index 000000000..e0524e404
--- /dev/null
+++ b/docs/plugins/tmpl/ac3dec.sgml
@@ -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
index 000000000..9c0b4eb81
--- /dev/null
+++ b/docs/plugins/tmpl/ac3parse.sgml
@@ -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
index 000000000..1bdd4a82e
--- /dev/null
+++ b/docs/plugins/tmpl/audioscale.sgml
@@ -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
index 000000000..18fbaf137
--- /dev/null
+++ b/docs/plugins/tmpl/cobin.sgml
@@ -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
index 000000000..829ef6882
--- /dev/null
+++ b/docs/plugins/tmpl/dvdsrc.sgml
@@ -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
index 000000000..7bb0d3465
--- /dev/null
+++ b/docs/plugins/tmpl/example.sgml
@@ -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
index 000000000..453ee2ed1
--- /dev/null
+++ b/docs/plugins/tmpl/gstaviencoder.sgml
@@ -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
index 000000000..f3877611d
--- /dev/null
+++ b/docs/plugins/tmpl/gstjpeg.sgml
@@ -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
index 000000000..ccbb494a8
--- /dev/null
+++ b/docs/plugins/tmpl/gstjpegdec.sgml
@@ -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
index 000000000..f3b3d0673
--- /dev/null
+++ b/docs/plugins/tmpl/gstjpegenc.sgml
@@ -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
index 000000000..611897652
--- /dev/null
+++ b/docs/plugins/tmpl/gstmpeg1encoder.sgml
@@ -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
index 000000000..2ce74351f
--- /dev/null
+++ b/docs/plugins/tmpl/gstmpeg2enc.sgml
@@ -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
index 000000000..c279658d0
--- /dev/null
+++ b/docs/plugins/tmpl/gstmpeg2play.sgml
@@ -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
index 000000000..b3b9db6a5
--- /dev/null
+++ b/docs/plugins/tmpl/gstmpeg_play.sgml
@@ -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
index 000000000..a86cf22ed
--- /dev/null
+++ b/docs/plugins/tmpl/gstmpegaudio.sgml
@@ -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
index 000000000..fe375f777
--- /dev/null
+++ b/docs/plugins/tmpl/gstmpg123.sgml
@@ -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
index 000000000..d2f22aa86
--- /dev/null
+++ b/docs/plugins/tmpl/gstparseau.sgml
@@ -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
index 000000000..22a8f3ed6
--- /dev/null
+++ b/docs/plugins/tmpl/gstparseavi.sgml
@@ -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
index 000000000..5b536e2cf
--- /dev/null
+++ b/docs/plugins/tmpl/gstparsewav.sgml
@@ -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
index 000000000..d59270a89
--- /dev/null
+++ b/docs/plugins/tmpl/gstreamer-plugins-unused.sgml
@@ -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
index 000000000..feebe84b6
--- /dev/null
+++ b/docs/plugins/tmpl/gstspectrum.sgml
@@ -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
index 000000000..cece4f3cd
--- /dev/null
+++ b/docs/plugins/tmpl/gstv4lsrc.sgml
@@ -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
index 000000000..8b34fd613
--- /dev/null
+++ b/docs/plugins/tmpl/gstwincodec.sgml
@@ -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
index 000000000..b3e9fc461
--- /dev/null
+++ b/docs/plugins/tmpl/gstwindec.sgml
@@ -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
index 000000000..2a4997b04
--- /dev/null
+++ b/docs/plugins/tmpl/gstwinenc.sgml
@@ -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
index 000000000..259ac0a86
--- /dev/null
+++ b/docs/plugins/tmpl/gstxa.sgml
@@ -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
index 000000000..cf9d21493
--- /dev/null
+++ b/docs/plugins/tmpl/gstxing.sgml
@@ -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
index 000000000..aa3588272
--- /dev/null
+++ b/docs/plugins/tmpl/median.sgml
@@ -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
index 000000000..4e79b5c40
--- /dev/null
+++ b/docs/plugins/tmpl/mp1videoparse.sgml
@@ -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
index 000000000..fd9d6a847
--- /dev/null
+++ b/docs/plugins/tmpl/mp2videoparse.sgml
@@ -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
index 000000000..6836a9415
--- /dev/null
+++ b/docs/plugins/tmpl/mp3parse.sgml
@@ -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
index 000000000..a77682a3d
--- /dev/null
+++ b/docs/plugins/tmpl/mpeg1parse.sgml
@@ -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
index 000000000..fafd52ecf
--- /dev/null
+++ b/docs/plugins/tmpl/mpeg2parse.sgml
@@ -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
index 000000000..b70dee2bb
--- /dev/null
+++ b/docs/plugins/tmpl/mpeg2subt.sgml
@@ -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
index 000000000..219eaa84e
--- /dev/null
+++ b/docs/plugins/tmpl/rtjpegdec.sgml
@@ -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
index 000000000..6b4011592
--- /dev/null
+++ b/docs/plugins/tmpl/rtjpegenc.sgml
@@ -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
index 000000000..f4ee1d306
--- /dev/null
+++ b/docs/plugins/tmpl/smooth.sgml
@@ -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
index 000000000..c9e149c7c
--- /dev/null
+++ b/docs/plugins/tmpl/smoothwave.sgml
@@ -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
index 000000000..58c174a69
--- /dev/null
+++ b/docs/plugins/tmpl/spindentity.sgml
@@ -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
index 000000000..09f343c3f
--- /dev/null
+++ b/docs/plugins/tmpl/stereo.sgml
@@ -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
index 000000000..ac866565b
--- /dev/null
+++ b/docs/plugins/tmpl/synaesthesia.sgml
@@ -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
index 000000000..497a7934a
--- /dev/null
+++ b/docs/plugins/tmpl/system_encode.sgml
@@ -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
index 000000000..b00fc8239
--- /dev/null
+++ b/docs/plugins/tmpl/vcdsrc.sgml
@@ -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
index 000000000..b3b8699d8
--- /dev/null
+++ b/docs/plugins/tmpl/videoscale.sgml
@@ -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
index 000000000..0dfafbac0
--- /dev/null
+++ b/docs/plugins/tmpl/videosink.sgml
@@ -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
index 000000000..d285c5c44
--- /dev/null
+++ b/docs/plugins/tmpl/volume.sgml
@@ -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
index 000000000..37f99b0f9
--- /dev/null
+++ b/docs/plugins/tmpl/vorbisdec.sgml
@@ -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
index 000000000..358d634e9
--- /dev/null
+++ b/docs/plugins/tmpl/vorbisenc.sgml
@@ -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
index 000000000..34abf7a5c
--- /dev/null
+++ b/docs/plugins/tmpl/vumeter.sgml
@@ -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>
+
diff --git a/gst/elements/gstasyncdisksrc.c b/gst/elements/gstasyncdisksrc.c
index 36b9d010e..3bb7fab4b 100644
--- a/gst/elements/gstasyncdisksrc.c
+++ b/gst/elements/gstasyncdisksrc.c
@@ -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;
diff --git a/gst/elements/gstaudiosink.c b/gst/elements/gstaudiosink.c
index fb53a8296..d3674b532 100644
--- a/gst/elements/gstaudiosink.c
+++ b/gst/elements/gstaudiosink.c
@@ -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);
diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c
index ca99a85eb..c5827aa50 100644
--- a/gst/gstbufferpool.c
+++ b/gst/gstbufferpool.c
@@ -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);
diff --git a/gst/gstconnection.c b/gst/gstconnection.c
index 38be65cbc..1e026150b 100644
--- a/gst/gstconnection.c
+++ b/gst/gstconnection.c
@@ -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;
diff --git a/gst/gstcpu.c b/gst/gstcpu.c
index c2ee86c3e..23fcf7cd0 100644
--- a/gst/gstcpu.c
+++ b/gst/gstcpu.c
@@ -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;
}
diff --git a/gst/gstcpu.h b/gst/gstcpu.h
index e8ebd3ee5..c6ee4fb91 100644
--- a/gst/gstcpu.h
+++ b/gst/gstcpu.h
@@ -23,11 +23,13 @@
#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__ */
diff --git a/gst/gstelement.c b/gst/gstelement.c
index 1a3d1ca7b..fa26e6617 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -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
*
diff --git a/gst/gstelement.h b/gst/gstelement.h
index a2df7842f..2f3361007 100644
--- a/gst/gstelement.h
+++ b/gst/gstelement.h
@@ -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 {
diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c
index cc841d510..28afac369 100644
--- a/gst/gstelementfactory.c
+++ b/gst/gstelementfactory.c
@@ -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;
diff --git a/gst/gstmeta.c b/gst/gstmeta.c
index 4b9665fda..dd259cc0b 100644
--- a/gst/gstmeta.c
+++ b/gst/gstmeta.c
@@ -22,6 +22,14 @@
#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;
diff --git a/gst/gstmeta.h b/gst/gstmeta.h
index 2ba8998af..47b33fb03 100644
--- a/gst/gstmeta.h
+++ b/gst/gstmeta.h
@@ -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) \
diff --git a/gst/gstpad.c b/gst/gstpad.c
index 063a44d2d..f02ae3764 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -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;
diff --git a/gst/gstplugin.c b/gst/gstplugin.c
index 8ea28be4c..171bc5960 100644
--- a/gst/gstplugin.c
+++ b/gst/gstplugin.c
@@ -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;
diff --git a/gst/gstthread.c b/gst/gstthread.c
index 2a2cf246b..6c2c2b444 100644
--- a/gst/gstthread.c
+++ b/gst/gstthread.c
@@ -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",
diff --git a/gst/gstthread.h b/gst/gstthread.h
index ceac92dcd..bdecf353a 100644
--- a/gst/gstthread.h
+++ b/gst/gstthread.h
@@ -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 */
diff --git a/gst/gstutils.c b/gst/gstutils.c
index cc631706f..2d2c32ea2 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -20,6 +20,15 @@
#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;
diff --git a/gst/gstxml.c b/gst/gstxml.c
index 9ad5d763c..4d702438d 100644
--- a/gst/gstxml.c
+++ b/gst/gstxml.c
@@ -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.
*
diff --git a/libs/colorspace/gstcolorspace.h b/libs/colorspace/gstcolorspace.h
index 1704d748f..b8b89a97c 100644
--- a/libs/colorspace/gstcolorspace.h
+++ b/libs/colorspace/gstcolorspace.h
@@ -28,26 +28,28 @@
#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__ */
diff --git a/libs/idct/gstidct.h b/libs/idct/gstidct.h
index 1d26bf4fa..2e0fd4b06 100644
--- a/libs/idct/gstidct.h
+++ b/libs/idct/gstidct.h
@@ -24,12 +24,12 @@
#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;
diff --git a/libs/riff/gstriff.h b/libs/riff/gstriff.h
index 75b96fae1..7d586d6fb 100644
--- a/libs/riff/gstriff.h
+++ b/libs/riff/gstriff.h
@@ -26,18 +26,21 @@
#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);
diff --git a/plugins/elements/gstasyncdisksrc.c b/plugins/elements/gstasyncdisksrc.c
index 36b9d010e..3bb7fab4b 100644
--- a/plugins/elements/gstasyncdisksrc.c
+++ b/plugins/elements/gstasyncdisksrc.c
@@ -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;
diff --git a/plugins/elements/gstaudiosink.c b/plugins/elements/gstaudiosink.c
index fb53a8296..d3674b532 100644
--- a/plugins/elements/gstaudiosink.c
+++ b/plugins/elements/gstaudiosink.c
@@ -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);
diff --git a/test/ac3play.c b/test/ac3play.c
index f5808923e..69eac2e47 100644
--- a/test/ac3play.c
+++ b/test/ac3play.c
@@ -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());
}
diff --git a/test/qtest.c b/test/qtest.c
index dd93405ef..6695830c4 100644
--- a/test/qtest.c
+++ b/test/qtest.c
@@ -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));