diff --git a/Makefile.am b/Makefile.am index 888cc6b333..f894e1812c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,10 +8,17 @@ else SUBDIRS_LGG = endif -SUBDIRS = include gst libs plugins tools test tests examples $(SUBDIRS_LGG) docs +if BUILD_DOCS +SUBDIRS_DOCS = docs +else +SUBDIRS_DOCS = +endif + +SUBDIRS = include gst libs plugins tools test tests examples \ +$(SUBDIRS_LGG) $(SUBDIRS_DOCS) # These are all the possible subdirs -DIST_SUBDIRS = intl po include gst libs plugins tools test tests examples gstplay editor docs +DIST_SUBDIRS = include gst libs plugins tools test tests examples gstplay editor docs debian bin_SCRIPTS = gstreamer-config @@ -19,7 +26,7 @@ bin_SCRIPTS = gstreamer-config m4datadir = $(datadir)/aclocal m4data_DATA = gstreamer.m4 -EXTRA_DIST = gstreamer.spec.in gstreamer-config.in gstreamer.m4 LICENSE REQUIREMENTS ABOUT-NLS +EXTRA_DIST = gstreamer.spec.in gstreamer-config.in gstreamer.m4 LICENSE REQUIREMENTS dist-hook: cp gstreamer.spec $(distdir) diff --git a/configure.in b/configure.in index 3734d93d6e..3be5a377d8 100644 --- a/configure.in +++ b/configure.in @@ -7,7 +7,7 @@ AM_CONFIG_HEADER(config.h) dnl FIXME this should be GSTREAMER_ now STREAMER_MAJOR_VERSION=0 STREAMER_MINOR_VERSION=1 -STREAMER_MICRO_VERSION=0 +STREAMER_MICRO_VERSION=1 STREAMER_VERSION=$STREAMER_MAJOR_VERSION.$STREAMER_MINOR_VERSION.$STREAMER_MICRO_VERSION PACKAGE=gstreamer @@ -41,20 +41,23 @@ AC_SUBST(GSTREAMER_LIBVERSION) AM_MAINTAINER_MODE -AC_ISC_POSIX AC_PROG_CC +AC_ISC_POSIX AC_STDC_HEADERS AC_ARG_PROGRAM +dnl We disable static building for development, for time savings +dnl *NOTE*: dnl this line before release, so release does static too AM_DISABLE_STATIC AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL -dnl ALL_LINGUAS="" -dnl AM_GNU_GETTEXT - CFLAGS="" +dnl This is used for the -config script... +builddir=`pwd` +AC_SUBST(builddir) + dnl ############################## dnl # Do automated configuration # dnl ############################## @@ -156,16 +159,16 @@ AM_PATH_GLIB(1.2.0,, AC_MSG_ERROR(Cannot find glib: Is glib-config in path?), glib gmodule gthread) dnl Put the glib flags into $LIBS and $CFLAGS since we always use them -LIBS="$LIBS $GLIB_LIBS" -CFLAGS="$CFLAGS $GLIB_CFLAGS" +CORE_LIBS="$GLIB_LIBS" +CORE_CFLAGS="$GLIB_CFLAGS" dnl Check for gtk AM_PATH_GTK(1.2.0,, AC_MSG_ERROR(Cannot find gtk: Is gtk-config in path?)) dnl Put the gtk flags into $LIBS and $CFLAGS since we always use them -LIBS="$LIBS $GTK_LIBS" -CFLAGS="$CFLAGS $GTK_CFLAGS" +CORE_LIBS="$CORE_LIBS $GTK_LIBS" +CORE_CFLAGS="$CORE_CFLAGS $GTK_CFLAGS" dnl Check for libxml @@ -177,8 +180,8 @@ XML_LIBS=`xml-config --libs` XML_CFLAGS=`xml-config --cflags` AC_SUBST(XML_LIBS) AC_SUBST(XML_CFLAGS) -LIBS="$LIBS $XML_LIBS" -CFLAGS="$CFLAGS $XML_CFLAGS" +CORE_LIBS="$CORE_LIBS $XML_LIBS" +CORE_CFLAGS="$CORE_CFLAGS $XML_CFLAGS" dnl Next, check for the optional libraries: @@ -257,8 +260,8 @@ else LIBGLADE_GNOME_CFLAGS=`libglade-config --cflags gnome` libglade_save_CFLAGS="$CFLAGS" libglade_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $LIBGLADE_GNOME_CFLAGS" - LIBS="$LIBS $LIBGLADE_GNOME_LIBS" + CFLAGS="$CFLAGS $LIBGLADE_GNOME_CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $LIBGLADE_GNOME_LIBS $GTK_LIBS" HAVE_LIBGLADE_GNOME="no" AC_TRY_LINK([#include ],[glade_gnome_init();], HAVE_LIBGLADE_GNOME="yes", @@ -348,7 +351,7 @@ AC_CHECK_HEADER(cdda_paranoia.h, :, HAVE_CDPARANOIA=no) dnl Check for liblame AC_MSG_CHECKING(LAME library) AC_CHECK_LIB(mp3lame, lame_init, HAVE_LIBLAME=yes, HAVE_LIBLAME=no, ) -AC_CHECK_HEADER(lame.h, :, HAVE_LIBLAME=no) +AC_CHECK_HEADER(lame/lame.h, :, HAVE_LIBLAME=no) dnl Check for libshout AC_MSG_CHECKING(Shout library) @@ -487,6 +490,16 @@ AC_ARG_WITH(win32_libdir, esac], [:]) dnl Default value +AC_ARG_ENABLE(docs-build, +[ --enable-docs-build enable the building of the documentation], +[case "${enableval}" in + yes) BUILD_DOCS=yes ;; + no) BUILD_DOCS=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-docs-build) ;; +esac], +[BUILD_DOCS=no]) dnl Default value + + dnl ################################################ dnl # Set defines according to variables set above # @@ -564,6 +577,7 @@ AM_CONDITIONAL(HAVE_LIBGLADE_GNOME, test "x$HAVE_LIBGLADE_GNOME" = "xyes") AM_CONDITIONAL(HAVE_GNOME, test "x$HAVE_GNOME" = "xyes") AM_CONDITIONAL(HAVE_LIBXV, test "x$HAVE_LIBXV" = "xyes") AM_CONDITIONAL(HAVE_GTK_DOC, $HAVE_GTK_DOC) +AM_CONDITIONAL(BUILD_DOCS, test "x$BUILD_DOCS" = "xyes") AM_CONDITIONAL(HAVE_DB2HTML, $HAVE_DB2HTML) AM_CONDITIONAL(HAVE_DB2PS, $HAVE_DB2PS) AM_CONDITIONAL(HAVE_PS2PDF, $HAVE_PS2PDF) @@ -609,7 +623,10 @@ dnl ############################## dnl # Set up the defaults cflags # dnl ############################## dnl CC="kgcc" -CFLAGS="$CFLAGS -O6 -Wall" +CFLAGS="$CORE_CFLAGS $CFLAGS -O6 -Wall" +LIBS="$CORE_LIBS $LIBS" +AC_SUBST(CORE_LIBS) +AC_SUBST(CORE_CFLAGS) dnl FIXME: having to AC_SUBST these is messy. Not sure if CPPFLAGS and LDFLAGS dnl need it, either. @@ -648,8 +665,6 @@ dnl # Make the output files # dnl ######################### AC_OUTPUT([Makefile -intl/Makefile -po/Makefile.in include/Makefile include/wine/Makefile gst/Makefile @@ -756,6 +771,7 @@ docs/plugins/Makefile docs/plugins/gstreamer-plugins.types docs/manual/Makefile docs/fwg/Makefile +debian/Makefile stamp.h gstreamer-config gstreamer.spec]) diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 0000000000..693edc0e5e --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,2 @@ +*.debhelper +*substvars diff --git a/debian/Makefile.am b/debian/Makefile.am new file mode 100644 index 0000000000..f38ad440d3 --- /dev/null +++ b/debian/Makefile.am @@ -0,0 +1,33 @@ +EXTRA_DIST = \ + Makefile.am \ + README.Debian \ + changelog \ + control \ + copyright \ + gsteditor.files \ + gsteditor.menu \ + gstmediaplay.files \ + gstmediaplay.menu \ + gstreamer-cdparanoia.files \ + gstreamer-common.files \ + gstreamer-doc.files \ + gstreamer-elements.files \ + gstreamer-esd.files \ + gstreamer-lame.files \ + gstreamer-mpg123.files \ + gstreamer-plugin-template.postinst \ + gstreamer-plugin-template.prerm \ + gstreamer-runtime.files \ + gstreamer-runtime.postinst \ + gstreamer-tools.files \ + gstreamer-vorbis.files \ + libgst-dev.files \ + libgst0.files \ + libgst0.postinst \ + libgsteditor-dev.files \ + libgsteditor0.files \ + libgsteditor0.postinst \ + libgstmediaplay-dev.files \ + libgstmediaplay0.files \ + libgstmediaplay0.postinst \ + rules diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000000..72064b54c2 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,38 @@ +GStreamer for Debian +---------------------- +This package contains the GStreamer distribution. + +More information can be found at http://gstreamer.net/ + +GStreamer is split into a number of base packages: + + libgst0 shared core libs + libgst-dev development libs and headers + libgst-runtime tools required by the libs (gstreamer-register) + gstreamer-doc documentation + gstreamer-tools useful tools + +recommended plugins: + + gstreamer-elements core plugins + gstreamer-common many independent plugins + +optional plugins: + + gstreamer-cdparanoia cdparanoia plugin + gstreamer-esd ESD plugin + gstreamer-lame LAME plugin + gstreamer-mpg123 mpg123 plugin + gstreamer-vorbis Vorbis plugin + +and applications and their supporting libs: + + libgstmediaplay0 media player libs + libgstmediaplay-dev media player dev support + gstmediaplay media player application + + libgsteditor0 stream pipeline visual editor libs + libgsteditor-dev stream pipeline visual editor dev support + gsteditor stream pipeline visual editor application + +David I. Lehn Fri, 19 Jan 2001 19:13:06 -0500 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000000..245fd6a67c --- /dev/null +++ b/debian/changelog @@ -0,0 +1,23 @@ +gstreamer (0.1.1-1) unstable; urgency=low + + * New upstream release + * disable docs build, broken at the momemnt + + -- David I. Lehn Sun, 25 Feb 2001 17:58:25 -0500 + +gstreamer (0.1.0-2) unstable; urgency=low + + * debian/rules: call configure instead of autogen.sh + + -- David I. Lehn Sat, 24 Feb 2001 18:31:36 -0500 + +gstreamer (0.1.0-1) unstable; urgency=low + + * Initial Release. + + -- David I. Lehn Mon, 15 Jan 2001 18:25:18 -0500 + +Local variables: +mode: debian-changelog +add-log-mailing-address "dlehn@vt.edu" +End: diff --git a/debian/control b/debian/control new file mode 100644 index 0000000000..3152cacc13 --- /dev/null +++ b/debian/control @@ -0,0 +1,143 @@ +Source: gstreamer +Section: x11 +Priority: optional +Maintainer: David I. Lehn +Build-Depends: debhelper (>= 3.0.0), libxml-dev (>= 1.8.10), zlib1g-dev (>= 1:1.1.3), libghttp-dev (>= 1.0.6), libglib-dev (>= 1.2.8), libgtk1.2-dev (>= 1.2.8), libglade0-dev (>= 0.14), libglade-gnome0-dev (>= 0.14), libesd0-dev (>= 0.2.22), libcdparanoia0-dev (>= 3a9.7), libvorbis-dev (>= 1.0beta3), libgnome-dev (>= 1.2.11), libasound1-dev (>= 0.5.10), libghttp-dev (>= 1.0.9), libjpeg62-dev (>= 6b) +Build-Depends-Indep: debhelper (>= 3.0.0), gtk-doc-tools (>= 0.4.0), jade (>= 1.2.1), transfig (>= 3.2.3.c) +Standards-Version: 3.5.2.0 + +Package: libgst0 +Architecture: any +Section: libs +Depends: ${shlibs:Depends} +Suggests: gstreamer-elements, gstreamer-common +Description: Core GStreamer shared library + Core GStreamer shared library + +Package: libgst-dev +Architecture: any +Section: devel +Depends: libgst0 (= ${Source-Version}), libc6-dev +Recommends: gstreamer-doc (= ${Source-Version}) +Description: GStreamer development libraries and headers + GStreamer development libraries and headers + +Package: gstreamer-runtime +Architecture: any +Section: libs +Depends: ${shlibs:Depends} +Description: gstreamer-register binary needed to manage plugin registry + gstreamer-register binary needed to manage plugin registry + +Package: gstreamer-doc +Architecture: all +Section: doc +Recommends: libgst-dev (= ${Source-Version}) +Description: Core GStreamer documentation + Core GStreamer documentation + +Package: gstreamer-tools +Architecture: any +Section: x11 +Depends: ${shlibs:Depends} +Suggests: gstreamer-common +Description: Tools for use with GStreamer + Tools for use with GStreamer + . + gstreamer-inspect: query details of installed plugins + gstreamer-launch: command line pipeline generator + +Package: libgstmediaplay0 +Architecture: any +Section: libs +Depends: ${shlibs:Depends} +Description: GStreamer media player library + GStreamer media player library + +Package: libgstmediaplay-dev +Architecture: any +Section: devel +Depends: libgstmediaplay0 (= ${Source-Version}), libc6-dev +Description: GStreamer media player development library and header + GStreamer media player development library and header + +Package: gstmediaplay +Architecture: any +Section: x11 +Depends: ${shlibs:Depends} +Suggests: gstreamer-common +Description: GStreamer media player + GStreamer media player + +Package: libgsteditor0 +Architecture: any +Section: libs +Depends: ${shlibs:Depends} +Description: GStreamer editor library + GStreamer editor library + +Package: libgsteditor-dev +Architecture: any +Section: devel +Depends: libgsteditor0 (= ${Source-Version}), libc6-dev +Description: GStreamer editor development library and header + GStreamer editor development library and header + +Package: gsteditor +Architecture: any +Section: x11 +Depends: ${shlibs:Depends} +Suggests: gstreamer-common +Description: GStreamer editor + GStreamer editor + +Package: gstreamer-cdparanoia +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: cdparanoia plugin for GStreamer + cdparanoia plugin for GStreamer + +Package: gstreamer-common +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: Collection of GStreamer plugins + Collection of GStreamer plugins + . + These plugins have no special dependencies. + +Package: gstreamer-elements +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: Core elements plugin for GStreamer + Core elements plugin for GStreamer + +Package: gstreamer-esd +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: Enlightened Sound Daemon plugin for GStreamer + Enlightened Sound Daemon plugin for GStreamer + +Package: gstreamer-lame +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: LAME plugin for GStreamer + LAME plugin for GStreamer + +Package: gstreamer-mpg123 +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: mpg123 plugin for GStreamer + mpg123 plugin for GStreamer + +Package: gstreamer-vorbis +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, gstreamer-runtime +Description: Vorbis plugin for GStreamer + Vorbis plugin for GStreamer diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000000..fa8250bbe5 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,29 @@ +This package was debianized by David I. Lehn on +Mon, 15 Jan 2001 18:21:37 -0500. + +It was downloaded from http://gstreamer.net/ + +Upstream Author(s): + Erik Walthinsen + Wim Taymans + Richard Boulton + +Copyright: + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this package; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +On Debian GNU/Linux systems, the complete text of the GNU Lesser General +Public License can be found in `/usr/share/common-licenses/LGPL'. + diff --git a/debian/gsteditor.files b/debian/gsteditor.files new file mode 100644 index 0000000000..22e2d6e96c --- /dev/null +++ b/debian/gsteditor.files @@ -0,0 +1,2 @@ +usr/bin/gsteditor +usr/share/gsteditor diff --git a/debian/gsteditor.menu b/debian/gsteditor.menu new file mode 100644 index 0000000000..c78b4d2517 --- /dev/null +++ b/debian/gsteditor.menu @@ -0,0 +1,5 @@ +?package(gsteditor): \ + needs=X11 \ + section=Apps/Viewers \ + title="GStreamer Editor" \ + command="/usr/bin/gsteditor" diff --git a/debian/gstmediaplay.files b/debian/gstmediaplay.files new file mode 100644 index 0000000000..be0f4c8551 --- /dev/null +++ b/debian/gstmediaplay.files @@ -0,0 +1,2 @@ +usr/bin/gstmediaplay +usr/share/gstmediaplay diff --git a/debian/gstmediaplay.menu b/debian/gstmediaplay.menu new file mode 100644 index 0000000000..904038cde3 --- /dev/null +++ b/debian/gstmediaplay.menu @@ -0,0 +1,5 @@ +?package(gstmediaplay): \ + needs=X11 \ + section=Apps/Viewers \ + title="GStreamer Media Player" \ + command="/usr/bin/gstmediaplay" diff --git a/debian/gstreamer-cdparanoia.files b/debian/gstreamer-cdparanoia.files new file mode 100644 index 0000000000..b347fa11f8 --- /dev/null +++ b/debian/gstreamer-cdparanoia.files @@ -0,0 +1 @@ +usr/lib/gst/libcdparanoia.* diff --git a/debian/gstreamer-common.files b/debian/gstreamer-common.files new file mode 100644 index 0000000000..8463b80dad --- /dev/null +++ b/debian/gstreamer-common.files @@ -0,0 +1,48 @@ +usr/lib/gst/libgstriff.* +usr/lib/gst/libgstcolorspace.* +usr/lib/gst/libgstgetbits.* +usr/lib/gst/libgstparsewav.* +usr/lib/gst/libgstputbits.* +usr/lib/gst/libgstidct.* +usr/lib/gst/libgsttypes.* +usr/lib/gst/libgstvideoscale.* +usr/lib/gst/libwinloader.* +usr/lib/gst/libgstparseau.* +usr/lib/gst/libmp3parse.* +usr/lib/gst/libmp3types.* +usr/lib/gst/libstereo.* +usr/lib/gst/libvolume.* +usr/lib/gst/libgstspectrum.* +usr/lib/gst/libvumeter.* +usr/lib/gst/libsynaesthesia.* +usr/lib/gst/libsmoothwave.* +usr/lib/gst/libmpeg2parse.* +usr/lib/gst/libac3dec.* +usr/lib/gst/libac3parse.* +usr/lib/gst/libmpeg2play.* +usr/lib/gst/libmpeg2dec.* +usr/lib/gst/libmpeg2enc.* +usr/lib/gst/libmpeg2subt.* +usr/lib/gst/libmp2videoparse.* +usr/lib/gst/libmpeg2types.* +usr/lib/gst/libmpeg1parse.* +usr/lib/gst/libmpeg_play.* +usr/lib/gst/libmpeg1encoder.* +usr/lib/gst/libsystem_encode.* +usr/lib/gst/libmpegaudio.* +usr/lib/gst/libmpeg1types.* +usr/lib/gst/libvcdsrc.* +usr/lib/gst/librtjpeg.* +usr/lib/gst/libvideosink.* +usr/lib/gst/libv4lsrc.* +usr/lib/gst/libjpeg.* +usr/lib/gst/libmp1videoparse.* +usr/lib/gst/libvideoscale.* +usr/lib/gst/libsmooth.* +usr/lib/gst/libmedian.* +usr/lib/gst/libgstladspa.* +usr/lib/gst/libaudioscale.* +usr/lib/gst/libwincodec.* +usr/lib/gst/libaviencoder.* +usr/lib/gst/libavidecoder.* +usr/lib/gst/libdvdsrc.* diff --git a/debian/gstreamer-doc.files b/debian/gstreamer-doc.files new file mode 100644 index 0000000000..c6ff27539a --- /dev/null +++ b/debian/gstreamer-doc.files @@ -0,0 +1 @@ +usr/share/gstreamer diff --git a/debian/gstreamer-elements.files b/debian/gstreamer-elements.files new file mode 100644 index 0000000000..7a18765dc5 --- /dev/null +++ b/debian/gstreamer-elements.files @@ -0,0 +1 @@ +usr/lib/gst/libgstelements.* diff --git a/debian/gstreamer-esd.files b/debian/gstreamer-esd.files new file mode 100644 index 0000000000..dbfa96fc28 --- /dev/null +++ b/debian/gstreamer-esd.files @@ -0,0 +1 @@ +usr/lib/gst/libesdsink.* diff --git a/debian/gstreamer-lame.files b/debian/gstreamer-lame.files new file mode 100644 index 0000000000..ab21a06129 --- /dev/null +++ b/debian/gstreamer-lame.files @@ -0,0 +1 @@ +usr/lib/gst/libgstlame.* diff --git a/debian/gstreamer-mpg123.files b/debian/gstreamer-mpg123.files new file mode 100644 index 0000000000..f360298564 --- /dev/null +++ b/debian/gstreamer-mpg123.files @@ -0,0 +1 @@ +usr/lib/gst/libmpg123.* diff --git a/debian/gstreamer-plugin-template.postinst b/debian/gstreamer-plugin-template.postinst new file mode 100644 index 0000000000..b3a2e1807f --- /dev/null +++ b/debian/gstreamer-plugin-template.postinst @@ -0,0 +1,25 @@ +#! /bin/sh +# template plugin postinst script + +set -e + +case "$1" in + configure) + # Update shared lib deps + gstreamer-register + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +#DEBHELPER# + +exit 0 + diff --git a/debian/gstreamer-plugin-template.prerm b/debian/gstreamer-plugin-template.prerm new file mode 100644 index 0000000000..4a581177ed --- /dev/null +++ b/debian/gstreamer-plugin-template.prerm @@ -0,0 +1,23 @@ +#! /bin/sh +# template plugin prerm script + +set -e + +case "$1" in + remove|upgrade|deconfigure) + # update the shared libs + gstreamer-register + + ;; + failed-upgrade) + ;; + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +#DEBHELPER# + +exit 0 + diff --git a/debian/gstreamer-runtime.files b/debian/gstreamer-runtime.files new file mode 100644 index 0000000000..4a423fb75a --- /dev/null +++ b/debian/gstreamer-runtime.files @@ -0,0 +1 @@ +usr/bin/gstreamer-register diff --git a/debian/gstreamer-runtime.postinst b/debian/gstreamer-runtime.postinst new file mode 100644 index 0000000000..8e649c5967 --- /dev/null +++ b/debian/gstreamer-runtime.postinst @@ -0,0 +1,47 @@ +#!/bin/sh +# postinst script for gstreamer +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +case "$1" in + configure) + gstreamer-register + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/debian/gstreamer-tools.files b/debian/gstreamer-tools.files new file mode 100644 index 0000000000..5e029a3348 --- /dev/null +++ b/debian/gstreamer-tools.files @@ -0,0 +1,2 @@ +usr/bin/gstreamer-inspect +usr/bin/gstreamer-launch diff --git a/debian/gstreamer-vorbis.files b/debian/gstreamer-vorbis.files new file mode 100644 index 0000000000..416b74183b --- /dev/null +++ b/debian/gstreamer-vorbis.files @@ -0,0 +1 @@ +usr/lib/gst/libgstvorbis.* diff --git a/debian/libgst-dev.files b/debian/libgst-dev.files new file mode 100644 index 0000000000..6d0eba8db5 --- /dev/null +++ b/debian/libgst-dev.files @@ -0,0 +1,6 @@ +usr/include +usr/share/aclocal +usr/bin/gstreamer-config +usr/lib/libgst.la +usr/lib/libgst.so +usr/lib/gst/libgstelements.la diff --git a/debian/libgst0.files b/debian/libgst0.files new file mode 100644 index 0000000000..1f4bb431e3 --- /dev/null +++ b/debian/libgst0.files @@ -0,0 +1 @@ +usr/lib/libgst.so.* diff --git a/debian/libgst0.postinst b/debian/libgst0.postinst new file mode 100644 index 0000000000..6a6aff91d1 --- /dev/null +++ b/debian/libgst0.postinst @@ -0,0 +1,47 @@ +#!/bin/sh +# postinst script for gstreamer +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +case "$1" in + configure) + ldconfig + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/debian/libgsteditor-dev.files b/debian/libgsteditor-dev.files new file mode 100644 index 0000000000..0e4c1bcdf7 --- /dev/null +++ b/debian/libgsteditor-dev.files @@ -0,0 +1,2 @@ +usr/lib/libgsteditor.la +usr/lib/libgsteditor.so diff --git a/debian/libgsteditor0.files b/debian/libgsteditor0.files new file mode 100644 index 0000000000..f220031216 --- /dev/null +++ b/debian/libgsteditor0.files @@ -0,0 +1 @@ +usr/lib/libgsteditor.so.* diff --git a/debian/libgsteditor0.postinst b/debian/libgsteditor0.postinst new file mode 100644 index 0000000000..6a6aff91d1 --- /dev/null +++ b/debian/libgsteditor0.postinst @@ -0,0 +1,47 @@ +#!/bin/sh +# postinst script for gstreamer +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +case "$1" in + configure) + ldconfig + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/debian/libgstmediaplay-dev.files b/debian/libgstmediaplay-dev.files new file mode 100644 index 0000000000..b6c11f62fb --- /dev/null +++ b/debian/libgstmediaplay-dev.files @@ -0,0 +1,2 @@ +usr/lib/libgstmediaplay.la +usr/lib/libgstmediaplay.so diff --git a/debian/libgstmediaplay0.files b/debian/libgstmediaplay0.files new file mode 100644 index 0000000000..763c8fc0c7 --- /dev/null +++ b/debian/libgstmediaplay0.files @@ -0,0 +1 @@ +usr/lib/libgstmediaplay.so.* diff --git a/debian/libgstmediaplay0.postinst b/debian/libgstmediaplay0.postinst new file mode 100644 index 0000000000..6a6aff91d1 --- /dev/null +++ b/debian/libgstmediaplay0.postinst @@ -0,0 +1,47 @@ +#!/bin/sh +# postinst script for gstreamer +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see /usr/share/doc/packaging-manual/ +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +case "$1" in + configure) + ldconfig + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 + + diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000000..0211411ff4 --- /dev/null +++ b/debian/rules @@ -0,0 +1,146 @@ +#!/usr/bin/make -f +# Sample debian/rules that uses debhelper. +# GNU copyright 1997 by Joey Hess. +# + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatability version to use. +export DH_COMPAT=2 + +# This has to be exported to make some magic below work. +export DH_OPTIONS + +# The plugins are basically the same. +# Link special names to a template file. +# still need "*.files" to be done by hand + +PLUGINS=cdparanoia common elements esd lame mpg123 vorbis + +setup-links: + for i in $(PLUGINS); do \ + ln -fs debian/gstreamer-plugin-template.postinst \ + debian/gstreamer-$$i.postinst; \ + ln -fs debian/gstreamer-plugin-template.prerm \ + debian/gstreamer-$$i.prerm; \ + done + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + ./configure \ + --prefix=/usr \ + --mandir=\$${prefix}/share/man \ + --infodir=\$${prefix}/share/info \ + --with-configdir=/etc/gstreamer \ + --disable-plugin-srcdir \ + --disable-docs-build + + touch configure-stamp + +build: configure-stamp build-stamp +build-stamp: + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean + + dh_clean + + for i in $(PLUGINS); do \ + rm -f debian/gstreamer-$$i.postinst; \ + rm -f debian/gstreamer-$$i.prerm; \ + done + +install: DH_OPTIONS= +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/gstreamer. + $(MAKE) install prefix=$(CURDIR)/debian/gstreamer/usr + + dh_movefiles --sourcedir=debian/gstreamer + +# Build architecture-independent files here. +# Pass -i to all debhelper commands in this target to reduce clutter. +binary-indep: DH_OPTIONS=-i +binary-indep: build install +# Need this version of debhelper for DH_OPTIONS to work. + dh_testdir + dh_testroot +# dh_installdebconf + dh_installdocs + dh_installexamples + dh_installmenu +# dh_installemacsen +# dh_installpam +# dh_installinit +# dh_installcron +# dh_installmanpages +# dh_installinfo +# dh_undocumented + dh_installchangelogs ChangeLog + dh_strip +# dh_link + dh_compress + dh_fixperms +# You may want to make some executables suid here. +# dh_suidregister + dh_installdeb +# dh_makeshlibs +# dh_perl +# dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +# Build architecture-dependent files here. +# Pass -a to all debhelper commands in this target to reduce clutter. +binary-arch: DH_OPTIONS=-a +binary-arch: build install setup-links +# Need this version of debhelper for DH_OPTIONS to work. + dh_testdir + dh_testroot +# dh_installdebconf + dh_installdocs + dh_installexamples + dh_installmenu +# dh_installemacsen +# dh_installpam +# dh_installinit +# dh_installcron +# dh_installmanpages +# dh_installinfo + dh_undocumented + dh_installchangelogs ChangeLog + dh_strip +# dh_link + dh_compress + dh_fixperms +# You may want to make some executables suid here. +# dh_suidregister + dh_installdeb + dh_makeshlibs +# dh_perl + dh_shlibdeps -l`pwd`/debian/libgst0/usr/lib:`pwd`/debian/libgstmediaplay0/usr/lib:`pwd`/debian/libgsteditor0/usr/lib + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/docs/Makefile.am b/docs/Makefile.am index f6fd3b4500..cd66e83097 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = manual fwg gst libs +SUBDIRS = manual fwg gst libs plugins EXTRA_DIST = random slides manuals.mak diff --git a/docs/fwg/testapp.sgml b/docs/fwg/testapp.sgml index be0807291f..bfbd66abdd 100644 --- a/docs/fwg/testapp.sgml +++ b/docs/fwg/testapp.sgml @@ -17,7 +17,7 @@ - + Running the pipeline diff --git a/docs/fwg/titlepage.sgml b/docs/fwg/titlepage.sgml index 6893a4b9f1..c7b46aca1b 100644 --- a/docs/fwg/titlepage.sgml +++ b/docs/fwg/titlepage.sgml @@ -23,7 +23,7 @@ - + This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or diff --git a/docs/gst/Makefile.am b/docs/gst/Makefile.am index 428758cf5f..f17dc1aa0b 100644 --- a/docs/gst/Makefile.am +++ b/docs/gst/Makefile.am @@ -23,7 +23,6 @@ tmpl_sources = \ tmpl/cothreads.sgml \ tmpl/gst.sgml \ tmpl/gstinfo.sgml \ - tmpl/gstasyncdisksrc.sgml \ tmpl/gstautoplug.sgml \ tmpl/gstscheduler.sgml \ tmpl/gstprops.sgml \ diff --git a/docs/gst/gstreamer-docs.sgml b/docs/gst/gstreamer-docs.sgml index 9f52596507..09ad84ab3e 100644 --- a/docs/gst/gstreamer-docs.sgml +++ b/docs/gst/gstreamer-docs.sgml @@ -30,7 +30,6 @@ - @@ -125,7 +124,6 @@ with some more specialized elements. &GstFakeSink; &GstDiskSrc; - &GstAsyncDiskSrc; &GstHttpSrc; &GstAudioSrc; diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index bd23c82583..b7ab308338 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -343,6 +343,7 @@ GstPadEOSFunction GstPadPushFunction GstPadPullFunction +GstRegionType GstPadPullRegionFunction GstPadDirection @@ -374,14 +375,16 @@ gst_pad_connect gst_pad_disconnect gst_pad_push gst_pad_pull -gst_pad_pull_region gst_pad_pullregion -gst_pad_select gst_pad_set_eos gst_pad_handle_qos gst_pad_eos gst_pad_load_and_connect +GST_RPAD_LEN +GST_RPAD_OFFSET +GST_RPAD_REGIONTYPE + GstRealPad GST_RPAD_DIRECTION GST_RPAD_CAPS @@ -506,6 +509,7 @@ gst_plugin_is_loaded gst_plugin_load_all gst_plugin_load gst_plugin_load_absolute +gst_plugin_add_path gst_library_load gst_plugin_add_factory gst_plugin_add_type @@ -690,21 +694,6 @@ GstCPUFlags gst_cpu_get_flags -
-gstasyncdisksrc -GstAsyncDiskSrc -GstAsyncDiskSrcFlags - -GstAsyncDiskSrc -GstAsyncDiskSrcClass -gst_asyncdisksrc_get_type -GST_TYPE_ASYNCDISKSRC -GST_ASYNCDISKSRC -GST_ASYNCDISKSRC_CLASS -GST_IS_ASYNCDISKSRC -GST_IS_ASYNCDISKSRC_CLASS -
-
gstaudiosink GstAudioSink @@ -749,7 +738,6 @@ GST_DISKSRC GST_DISKSRC_CLASS GST_IS_DISKSRC GST_IS_DISKSRC_CLASS -gst_disksrc_details
diff --git a/docs/gst/tmpl/gstbuffer.sgml b/docs/gst/tmpl/gstbuffer.sgml index 5b670acb07..9e6f6a2913 100644 --- a/docs/gst/tmpl/gstbuffer.sgml +++ b/docs/gst/tmpl/gstbuffer.sgml @@ -134,39 +134,6 @@ This macro releases a lock on the object. -FIXME this is strange. - - - - - -GST_BUFFER_READONLY -the buffer is read only - - - -GST_BUFFER_EOS -this buffer is the last one in the stream - - - -GST_BUFFER_ORIGINAL -this buffer not a copy - - - -GST_BUFFER_DONTFREE -do not try to free the data when this buffer is unref-ed - - - -GST_BUFFER_FLUSH -this buffer is not related to previous buffers. This flag is mainly -used when data in a stream has been skipped - - - - @GST_BUFFER_READONLY: the buffer is read only @@ -175,7 +142,7 @@ used when data in a stream has been skipped @GST_BUFFER_FLUSH: this buffer is not related to previous buffers. This flag is mainly used when data in a stream has been skipped @GST_BUFFER_EOS: this buffer is the last one in the stream -@GST_BUFFER_DISCONTINUOUS: +@GST_BUFFER_DISCONTINUOUS: The buffer has a discontinuity diff --git a/docs/gst/tmpl/gstcaps.sgml b/docs/gst/tmpl/gstcaps.sgml index 0ba8ee300a..af2ed33ff3 100644 --- a/docs/gst/tmpl/gstcaps.sgml +++ b/docs/gst/tmpl/gstcaps.sgml @@ -102,6 +102,8 @@ a mime-type and a set of properties. @caps: +@Param2: + @typeid: diff --git a/docs/gst/tmpl/gstdisksrc.sgml b/docs/gst/tmpl/gstdisksrc.sgml index 67c4fd6366..a7d80b5896 100644 --- a/docs/gst/tmpl/gstdisksrc.sgml +++ b/docs/gst/tmpl/gstdisksrc.sgml @@ -2,12 +2,11 @@ GstDiskSrc -Synchronous read from a file (disksrc) +Asynchronous read from a file (disksrc) -Synchonously read buffers from a file. If you need asynchronous reading -with seeking capabilities use a GstAsynDiskSrc instead. +Asynchonously read buffers from a file. @@ -45,11 +44,11 @@ Specify how many bytes to read at a time. -Get the current offset in the file. +Get/set the current offset in the file. - +Get the size of the file. diff --git a/docs/gst/tmpl/gstobject.sgml b/docs/gst/tmpl/gstobject.sgml index 21cb532ae3..1abc9546de 100644 --- a/docs/gst/tmpl/gstobject.sgml +++ b/docs/gst/tmpl/gstobject.sgml @@ -101,26 +101,26 @@ This macro releases a lock on the object. - +Acquire a reference to the mutex of this object. -@obj: +@obj: Object to get the mutex of. - +Get the parent of this object -@obj: +@obj: Object to get the parent of. - +Get the name of this object -@obj: +@obj: Object to get the name of. diff --git a/docs/gst/tmpl/gstpad.sgml b/docs/gst/tmpl/gstpad.sgml index c4dd1f6c6b..5a5dd33144 100644 --- a/docs/gst/tmpl/gstpad.sgml +++ b/docs/gst/tmpl/gstpad.sgml @@ -124,12 +124,14 @@ The function that will be called when pulling a buffer. The function that will be called when pulling a region buffer. +You can specify which buffer to get using an offset/length pair or +a start/stop timecode pair. @pad: the pad to get a buffer from -@type: +@type: the type of region to get (time or offset based) @offset: the offset of the region to get -@len: +@len: the length of the region to get @Returns: a #GstBuffer @size: the size of the region to get @@ -172,18 +174,28 @@ The function that will be called when pulling buffers. @Returns: a GstBuffer + + +the region types for #gst_pad_pullregion. + + +@GST_REGION_NONE: no type specified +@GST_REGION_OFFSET_LEN: an offet/length pair +@GST_REGION_TIME_LEN: a time start/length pair + The function that will be called when pulling a region buffer. +You can specify which buffer to get using an offset/length pair or +a start/stop timecode pair. -@pad: the pad to pull -@type: -@offset: the offset of the region to pull -@len: -@Returns: a GstBuffer - -@size: the size of the region to pull +@pad: the pad to get a buffer from +@type: the type of region to get (time or offset based) +@offset: the offset of the region to get +@len: the length of the region to get +@Returns: a #GstBuffer + @@ -440,6 +452,8 @@ Destroy the pad. @pad: +@buf: + @buffer: @@ -466,16 +480,6 @@ Destroy the pad. @size: - - - - - -@nextpad: -@Varargs: -@Returns: - - @@ -514,6 +518,30 @@ Call the EOS function of the pad @elements: + + + + + +@pad: + + + + + + + +@pad: + + + + + + + +@pad: + + diff --git a/docs/gst/tmpl/gstplugin.sgml b/docs/gst/tmpl/gstplugin.sgml index 322e86fd9b..b4b87637e0 100644 --- a/docs/gst/tmpl/gstplugin.sgml +++ b/docs/gst/tmpl/gstplugin.sgml @@ -135,6 +135,14 @@ by the loader at statup. @Returns: + + + + + +@path: + + diff --git a/docs/gst/tmpl/gstreamer-unused.sgml b/docs/gst/tmpl/gstreamer-unused.sgml index 5a7897fd53..f65eb6ad4d 100644 --- a/docs/gst/tmpl/gstreamer-unused.sgml +++ b/docs/gst/tmpl/gstreamer-unused.sgml @@ -154,14 +154,6 @@ This macro usets the given flags. - - - - - -@pipeline: -@src: - Use this macro to show debugging info. This is only usefull when developing new @@ -681,14 +673,6 @@ Query whether this object has multiple input pads. @size: @Returns: - - -Get a list of all elements. These elements will be used in autoplugging. - - -@data: user data -@Returns: a GList of elements - @@ -911,6 +895,15 @@ Specify the current offset in the file. @klass: + + + + + +@nextpad: +@Varargs: +@Returns: + @@ -1019,12 +1012,6 @@ on its own. @klass: - - -The maximum cost of a certain connection. - - - @@ -1471,15 +1458,6 @@ This macro unsets the given state on the element. @pad: @parent: - - - - - -@srccaps: -@sinkcaps: -@Returns: - @@ -1708,15 +1686,6 @@ This macro sets the given state on the element. - - - - - -@srcpad: -@sinkpad: -@Returns: - @@ -2026,14 +1995,6 @@ GstFilter @GST_CAPS_ALWAYS: @GST_CAPS_MAYBE: - - - - - -@pipeline: -@Returns: - @@ -2048,6 +2009,7 @@ Flags for the GstSrc element @GST_SRC_ASYNC: Indicates that this src is asynchronous @GST_SRC_FLAG_LAST: subclasses can use this to number their flags + @@ -2239,6 +2201,13 @@ The end point of a filter graph @format: @args...: + + +Reads data from a file. You can seek to a specific location by setting +the offset. + + + @@ -2266,14 +2235,6 @@ The end point of a filter graph - - - - - -@pipeline: -@sink: - plugin @@ -2336,14 +2297,6 @@ This macro checks to see if the given state is set. - - - - - -@name: -@Returns: - @@ -2387,16 +2340,6 @@ This macro sets the given flags. @klass: - - -Calculate the cost between two elements. - - -@src: the source element -@dest: the destination element -@data: optional user data -@Returns: the cost for a connection between the two elements - diff --git a/docs/manual/Makefile.am b/docs/manual/Makefile.am index 86452b25a6..9d9a225d29 100644 --- a/docs/manual/Makefile.am +++ b/docs/manual/Makefile.am @@ -1,5 +1,5 @@ manualname = gstreamer-manual -htmlname = gstreamer.html +htmlname = index.html sgml_files = gstreamer-manual.sgml \ advanced.sgml \ @@ -20,6 +20,7 @@ sgml_files = gstreamer-manual.sgml \ motivation.sgml \ plugins.sgml \ programs.sgml \ + debugging.sgml \ queues.sgml \ states.sgml \ threads.sgml \ diff --git a/docs/manual/bins.sgml b/docs/manual/bins.sgml index eb89b4c475..ec69b174cf 100644 --- a/docs/manual/bins.sgml +++ b/docs/manual/bins.sgml @@ -110,7 +110,7 @@ while (elements) { GstElement *element = GST_ELEMENT (elements->data); - g_print ("element in bin: %s\n", gst_element_get_name (element)); + g_print ("element in bin: %s\n", gst_element_get_name (element)); elements = g_list_next (elements); } diff --git a/docs/manual/debugging.sgml b/docs/manual/debugging.sgml new file mode 100644 index 0000000000..aae503c5ab --- /dev/null +++ b/docs/manual/debugging.sgml @@ -0,0 +1,89 @@ + + Debugging + + GStreamer has an extensive set of debugging tools for + plugin developers. + + + + Command line options + + Applications using the GStreamer libraries accept the following set + of command line argruments to enable the debugging system. + + + + + + + + Sets the mask for the debugging output. + + + + + + Sets the mask for the info output. + + + + + + Enable printout of errors while loading GST plugins. + + + + + + Add a directory to the plugin search path. + + + + Print the a short desciption of the + options and an overview of the current debugging/info masks + set. + + + + + + + The follwing table gives an overview of the mask values and + their meaning. (enabled) means that the corresponding flag + has been set. + + +Mask (to be OR'ed) info/debug FLAGS +-------------------------------------------------------- +0x00000001 (enabled)/ GST_INIT +0x00000002 / COTHREADS +0x00000004 / COTHREAD_SWITCH +0x00000008 / AUTOPLUG +0x00000010 / AUTOPLUG_ATTEMPT +0x00000020 / PARENTAGE +0x00000040 / STATES +0x00000080 / PLANING +0x00000100 / SCHEDULING +0x00000200 / OPERATION +0x00000400 / BUFFER +0x00000800 / CAPS +0x00001000 / CLOCK +0x00002000 / ELEMENT_PADS +0x00004000 / ELEMENTFACTORY +0x00008000 / PADS +0x00010000 / PIPELINE +0x00020000 / PLUGIN_LOADING +0x00040000 / PLUGIN_ERRORS +0x00080000 / PROPERTIES +0x00100000 / THREAD +0x00200000 / TYPES +0x00400000 / XML + + + + Adding a custom debug handler + + + + + diff --git a/docs/manual/dynamic.sgml b/docs/manual/dynamic.sgml index 4cfdcf6846..23a59263e7 100644 --- a/docs/manual/dynamic.sgml +++ b/docs/manual/dynamic.sgml @@ -102,7 +102,7 @@ new_pad_created (GstElement *parse, GstPad *pad, GstElement *pipeline) GtkWidget *appwindow; - g_print ("***** a new pad %s was created\n", gst_pad_get_name (pad)); + g_print ("***** a new pad %s was created\n", gst_pad_get_name (pad)); gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PAUSED); diff --git a/docs/manual/gstreamer-manual.sgml b/docs/manual/gstreamer-manual.sgml index ee6ea71526..69871cfaa4 100644 --- a/docs/manual/gstreamer-manual.sgml +++ b/docs/manual/gstreamer-manual.sgml @@ -23,12 +23,13 @@ + ]> - + @@ -43,7 +44,7 @@ - + This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the @@ -183,9 +184,12 @@ GStreamer comes prepackaged with a few programs. + and some usefull debugging options. + &DEBUGGING; + &PROGRAMS; &COMPONENTS; diff --git a/docs/manual/helloworld.sgml b/docs/manual/helloworld.sgml index f9802e01c6..7eaa2450bc 100644 --- a/docs/manual/helloworld.sgml +++ b/docs/manual/helloworld.sgml @@ -38,7 +38,7 @@ main (int argc, char *argv[]) gst_init(&argc, &argv); if (argc != 2) { - g_print ("usage: %s <filename>n", argv[0]); + g_print ("usage: %s <filename>n", argv[0]); exit (-1); } diff --git a/docs/manual/helloworld2.sgml b/docs/manual/helloworld2.sgml index 98c2e96736..1a48f7f991 100644 --- a/docs/manual/helloworld2.sgml +++ b/docs/manual/helloworld2.sgml @@ -41,7 +41,7 @@ main (int argc, char *argv[]) GstElement *pipeline; if (argc != 2) { - g_print ("usage: %s <filename>\n", argv[0]); + g_print ("usage: %s <filename>\n", argv[0]); exit (-1); } diff --git a/docs/manual/pads.sgml b/docs/manual/pads.sgml index 8cfaf47f5d..1efd56dd0b 100644 --- a/docs/manual/pads.sgml +++ b/docs/manual/pads.sgml @@ -34,7 +34,7 @@ while (pads) { GstPad *pad = GST_PAD (pads->data); - g_print ("pad name %s\n", gst_pad_get_name (pad)); + g_print ("pad name %s\n", gst_pad_get_name (pad)); pads = g_list_next (pads); } @@ -57,7 +57,7 @@ GstObject. - + Dynamic pads Some elements might not have their pads when they are created. This can, for @@ -82,7 +82,7 @@ static void pad_connect_func (GstElement *parser, GstPad *pad, GstElement *pipeline) { - g_print("***** a new pad %s was created\n", gst_pad_get_name(pad)); + g_print("***** a new pad %s was created\n", gst_pad_get_name(pad)); gst_element_set_state (pipeline, GST_STATE_PAUSED); @@ -119,6 +119,58 @@ main(int argc, char *argv[]) + + Request pads + + An element can also have request pads. These pads are not created automatically + but are only created on demand. This is very usefull for muxers, aggregators + and tee elements. + + + The tee element, for example, has one input pad and a request padtemplate for the + output pads. Whenever an element wants to get an output pad from the tee element, it + has to request the pad. + + + The following piece of code can be used to get a pad from the tee element. After + the pad has been requested, it can be used to connect another element to it. + + + ... + GstPad *pad; + ... + element = gst_elementfactory_make ("tee", "element"); + + pad = gst_element_request_pad_by_name (element, "src%d"); + g_print ("new pad %s\n", gst_pad_get_name (pad)); + ... + + + The gst_element_request_pad_by_name method can be used to get a pad + from the element based on the name_template of the padtemplate. + + + It is also possible to request a pad that is compatible with another + padtemplate. This is very usefull if you want to connect an element to + a muxer element and you need to request a pad that is compatible. The + gst_element_request_compatible_pad is used to request a compatible pad, as + is shown in the next example. + + + ... + GstPadTemplate *templ; + GstPad *pad; + ... + element = gst_elementfactory_make ("tee", "element"); + mp3parse = gst_elementfactory_make ("mp3parse", "mp3parse"); + + templ = gst_element_get_padtemplate_by_name (mp3parse, "sink"); + + pad = gst_element_request_compatible_pad (element, templ); + g_print ("new pad %s\n", gst_pad_get_name (pad)); + ... + + Capabilities of a GstPad @@ -258,12 +310,12 @@ Pads: ... caps = gst_pad_get_caps_list (pad); - g_print ("pad name %s\n", gst_pad_get_name (pad)); + g_print ("pad name %s\n", gst_pad_get_name (pad)); while (caps) { GstCaps *cap = (GstCaps *) caps->data; - g_print (" Capability name %s, MIME type\n", gst_caps_get_name (cap), + g_print (" Capability name %s, MIME type\n", gst_caps_get_name (cap), gst_caps_get_mime (cap)); caps = g_list_next (caps); diff --git a/docs/manual/plugins.sgml b/docs/manual/plugins.sgml index 4f7c57cbed..6d082d0104 100644 --- a/docs/manual/plugins.sgml +++ b/docs/manual/plugins.sgml @@ -55,7 +55,7 @@ struct _GstPlugin { while (plugins) { GstPlugin *plugin = (GstPlugin *)plugins->data; - g_print ("plugin: %s\n", gst_plugin_get_name (plugin)); + g_print ("plugin: %s\n", gst_plugin_get_name (plugin)); plugins = g_list_next (plugins); } diff --git a/docs/manual/queues.sgml b/docs/manual/queues.sgml index e057f2e8d7..2450e49961 100644 --- a/docs/manual/queues.sgml +++ b/docs/manual/queues.sgml @@ -66,7 +66,7 @@ main (int argc, char *argv[]) gst_init (&argc,&argv); if (argc != 2) { - g_print ("usage: %s <filename>\n", argv[0]); + g_print ("usage: %s <filename>\n", argv[0]); exit (-1); } diff --git a/docs/manual/quotes.sgml b/docs/manual/quotes.sgml index 78bff5dd0d..11cfc1f572 100644 --- a/docs/manual/quotes.sgml +++ b/docs/manual/quotes.sgml @@ -11,6 +11,26 @@ + + 16 Feb 2001 + + + wtay: + I shipped a few commerical products to >40000 people now but + GStreamer is way more exciting... + + + + + 16 Feb 2001 + + + * + tool-man + is a gstreamer groupie + + + 14 Jan 2001 diff --git a/docs/manual/threads.sgml b/docs/manual/threads.sgml index 29908ade29..b5f24f0bb6 100644 --- a/docs/manual/threads.sgml +++ b/docs/manual/threads.sgml @@ -77,7 +77,7 @@ main (int argc, char *argv[]) GstElement *thread; if (argc != 2) { - g_print ("usage: %s <filename>\n", argv[0]); + g_print ("usage: %s <filename>\n", argv[0]); exit (-1); } diff --git a/docs/manual/typedetection.sgml b/docs/manual/typedetection.sgml index cfbf97782b..297c56221a 100644 --- a/docs/manual/typedetection.sgml +++ b/docs/manual/typedetection.sgml @@ -64,7 +64,7 @@ main(int argc, char *argv[]) gst_init(&argc,&argv); if (argc != 2) { - g_print("usage: %s <filename>\n", argv[0]); + g_print("usage: %s <filename>\n", argv[0]); exit(-1); } diff --git a/docs/manual/xml.sgml b/docs/manual/xml.sgml index 399a90739a..7cc518205c 100644 --- a/docs/manual/xml.sgml +++ b/docs/manual/xml.sgml @@ -38,7 +38,7 @@ main (int argc, char *argv[]) gst_init (&argc,&argv); if (argc != 2) { - g_print ("usage: %s <filename>\n", argv[0]); + g_print ("usage: %s <filename>\n", argv[0]); exit (-1); } @@ -120,7 +120,9 @@ main (int argc, char *argv[]) Loading a GstElement from an XML file - A saved XML file can be loade with the gst_xml_new (filename, rootelement). + Before an XML file can be loaded, you must create a GstXML object. + A saved XML file can then be loaded with the + gst_xml_parse_file (xml, filename, rootelement) method. The root element can optionally left NULL. The following code example loads the previously created XML file and runs it. @@ -128,37 +130,28 @@ main (int argc, char *argv[]) #include <stdlib.h> #include <gst/gst.h> -gboolean playing; - -/* eos will be called when the src element has an end of stream */ -void -eos (GstElement *element, gpointer data) -{ - g_print ("have eos, quitting\n"); - - playing = FALSE; -} - int main(int argc, char *argv[]) { GstXML *xml; GstElement *bin; - GstElement *disk; + gboolean ret; gst_init (&argc, &argv); - xml = gst_xml_new ("xmlTest.gst", NULL); + xml = gst_xml_new (); + + ret = gst_xml_parse_file(xml, "xmlTest.gst", NULL); + g_assert (ret == TRUE); bin = gst_xml_get_element (xml, "bin"); + g_assert (bin != NULL); gst_element_set_state (bin, GST_STATE_PLAYING); playing = TRUE; - while (playing) { - gst_bin_iterate (GST_BIN (bin)); - } + while (gst_bin_iterate(GST_BIN(bin))); gst_element_set_state (bin, GST_STATE_NULL); @@ -173,6 +166,127 @@ main(int argc, char *argv[]) gst_xml_get_topelements (xml) can be used to get a list of all toplevel elements in the XML file. + + In addition to loading a file, you can also load a from a xmlDocPtr and + an in memory buffer using gst_xml_parse_doc and gst_xml_parse_memory + respectivily. both of these methods return a gboolean indicating success + or failure of the requested action. + + + + Adding custom XML tags into the core XML data + + + It is possible to add custom XML tags to the core XML created with + gst_xml_write. This feature can be used by an application to add more + information to the save plugins. the editor will for example insert + the position of the elements on the screen using the custom XML tags. + + + It is strongly suggested to save and load the custom XML tags using + a namespace. This will solve the problem of having your XML tags + interfere with the core XML tags. + + + To insert a hook into the element saving procedure you can connect + a signal to the GstElement using the following piece of code: + + +xmlNsPtr ns; + + ... + ns = xmlNewNs (NULL, "http://gstreamer.net/gst-test/1.0/", "test"); + ... + thread = gst_elementfactory_make("thread", "thread"); + gtk_signal_connect (GTK_OBJECT (thread), "object_saved", object_saved, g_strdup ("decoder thread")); + ... + + + When the thread is saved, the object_save method will be caled. Our example + will insert a comment tag: + + +static void +object_saved (GstObject *object, xmlNodePtr parent, gpointer data) +{ + xmlNodePtr child; + + child = xmlNewChild(parent, ns, "comment", NULL); + xmlNewChild(child, ns, "text", (gchar *)data); +} + + + Adding the custom tag code to the above example you will get an XML file + with the custom tags in it. Here's an excerpt: + + + ... + <gst:element> + <gst:name>thread</gst:name> + <gst:type>thread</gst:type> + <gst:version>0.1.0</gst:version> + ... + </gst:children> + <test:comment> + <test:text>decoder thread</test:text> + </test:comment> + </gst:element> + ... + + + To retrieve the custom XML again, you need to attach a signal to + the GstXML object used to load the XML data. You can then parse your + custom XML from the XML tree whenever an object is loaded. + + + + We can extend our previous example with the following piece of + code. + + + + xml = gst_xml_new (); + + gtk_signal_connect (GTK_OBJECT (xml), "object_loaded", xml_loaded, xml); + + ret = gst_xml_parse_file(xml, "xmlTest.gst", NULL); + g_assert (ret == TRUE); + + + + Whenever a new object has been loaded, the xml_loaded function will be + called. this function looks like: + + +static void +xml_loaded (GstXML *xml, GstObject *object, xmlNodePtr self, gpointer data) +{ + xmlNodePtr children = self->xmlChildrenNode; + + while (children) { + if (!strcmp (children->name, "comment")) { + xmlNodePtr nodes = children->xmlChildrenNode; + + while (nodes) { + if (!strcmp (nodes->name, "text")) { + gchar *name = g_strdup (xmlNodeGetContent (nodes)); + g_print ("object %s loaded with comment '%s'\n", + gst_object_get_name (object), name); + } + nodes = nodes->next; + } + } + children = children->next; + } +} + + + As you can see, you'll get a handle to the GstXML object, the + newly loaded GstObject and the xmlNodePtr that was used to create + this object. In the above example we look for our special tag inside + the XML tree that was used to load the object and we print our + comment to the console. + diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am index 66492fdd42..c210ca1909 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -47,7 +47,9 @@ sgml/$(DOC_MODULE)-doc.bottom: $(tmpl_sources) $(MAKE) sgml scanobj: - CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" ./gstdoc-scanobj --module=$(DOC_MODULE) + env CC="$(LIBTOOL) $(CC)" CFLAGS="$(LIBGST_CFLAGS) $(GLIB_CFLAGS) $(XML_CFLAGS) -I../../" LDFLAGS="$(GST_LIBS)"\ + ./gstdoc-scanobj --module=$(DOC_MODULE) + tmpl: scanobj ./gstdoc-mktmpl --module=$(DOC_MODULE) diff --git a/docs/plugins/gstdoc-scanobj b/docs/plugins/gstdoc-scanobj index 0faac08c69..a60e7c9ef2 100755 --- a/docs/plugins/gstdoc-scanobj +++ b/docs/plugins/gstdoc-scanobj @@ -839,7 +839,7 @@ output_widget_pads (FILE *fp, GstElement *element) type = gst_type_find_by_id(1); fprintf (fp, "\n%s::%s\n", - gtk_type_name(factory->type), pad->name); + gtk_type_name(factory->type), gst_object_get_name (GST_OBJECT (pad))); if (type) { fprintf(fp, "%s\n", type->mime); diff --git a/docs/plugins/tmpl/ac3parse.sgml b/docs/plugins/tmpl/ac3parse.sgml index 9c0b4eb817..6288ef2cc3 100644 --- a/docs/plugins/tmpl/ac3parse.sgml +++ b/docs/plugins/tmpl/ac3parse.sgml @@ -14,8 +14,3 @@ Ac3Parse - - - - - diff --git a/docs/plugins/tmpl/audioscale.sgml b/docs/plugins/tmpl/audioscale.sgml index 1bdd4a82e9..69bc3bb5d4 100644 --- a/docs/plugins/tmpl/audioscale.sgml +++ b/docs/plugins/tmpl/audioscale.sgml @@ -14,8 +14,3 @@ Audioscale - - - - - diff --git a/docs/plugins/tmpl/gstaviencoder.sgml b/docs/plugins/tmpl/gstaviencoder.sgml index 453ee2ed19..bdfaf6425b 100644 --- a/docs/plugins/tmpl/gstaviencoder.sgml +++ b/docs/plugins/tmpl/gstaviencoder.sgml @@ -14,13 +14,3 @@ GstAviEncoder - - - - - - - - - - diff --git a/docs/plugins/tmpl/gstmpeg2enc.sgml b/docs/plugins/tmpl/gstmpeg2enc.sgml index 2ce74351f0..0daebe9a25 100644 --- a/docs/plugins/tmpl/gstmpeg2enc.sgml +++ b/docs/plugins/tmpl/gstmpeg2enc.sgml @@ -14,8 +14,3 @@ GstMpeg2enc - - - - - diff --git a/docs/plugins/tmpl/gstmpeg2play.sgml b/docs/plugins/tmpl/gstmpeg2play.sgml index c279658d0a..bfc7025aa0 100644 --- a/docs/plugins/tmpl/gstmpeg2play.sgml +++ b/docs/plugins/tmpl/gstmpeg2play.sgml @@ -14,8 +14,3 @@ GstMpeg2play - - - - - diff --git a/docs/plugins/tmpl/gstmpeg_play.sgml b/docs/plugins/tmpl/gstmpeg_play.sgml index b3b9db6a53..5fb1038529 100644 --- a/docs/plugins/tmpl/gstmpeg_play.sgml +++ b/docs/plugins/tmpl/gstmpeg_play.sgml @@ -14,11 +14,3 @@ GstMpeg_play - - - - - -@gstmpeg_play: the object which received the signal. -@arg1: - diff --git a/docs/plugins/tmpl/gstreamer-plugins-unused.sgml b/docs/plugins/tmpl/gstreamer-plugins-unused.sgml index d59270a898..73c7ee0ae0 100644 --- a/docs/plugins/tmpl/gstreamer-plugins-unused.sgml +++ b/docs/plugins/tmpl/gstreamer-plugins-unused.sgml @@ -1,3 +1,1686 @@ + + + + + +@h: +@framebytes_arg: +@reduction_code: +@transform_code: +@convert_code: +@freq_limit: +@Returns: + + + + + + + + + + + + +@gb: +@runval: +@levelval: + + + + + + +@value: +@flag: + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + +@Param1: +@Param2: +@Returns: + + + + + + + + + + +@vid_stream: + + + + + + +@index: +@value: + + + + + + +gdkxvimage + + + + + + + + + + + + + +@gb: +@val: + + + + + + +@vid_stream: +@matrix: +@XIob: +@YIob: + + + + + + +@Returns: + + + + + + + + + + +@pack: +@SCR: +@mux_rate: + + + + + + + + + + + + +@vid_stream: +@hp: +@vp: +@h: +@v: + + +decoders + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@buf: +@rgb: + + + + + + + + + + + + +@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: + + + + + + + + + + + + +@h: +@framebytes_arg: +@reduction_code: +@transform_code: +@convert_code: +@freq_limit: +@Returns: + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@pad: +@buf: + + + + + + +@name: +@Returns: + + + + + + +@vid_stream: +@matrix: +@XIob: + + + + + + + + + + + + +@s: + + + + + + + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + +@bsi: +@samples: +@Returns: + + + + + + + + + + + + + + + + + + +@buf: +@rgb: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + +@Param1: + + + + + + + + + + + + + + +globals + + + + + + + + + + + + + + + +uncouple + + + + + + + + + + + + + + + + + + + +@buf: +@rgb: + + + + + + + + + + + + + + + + + + + + + + + + + + +@bs: + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + +ac3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + +@type: +@id: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + +@header: +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: +@distance: + + +crc + + + + + + + +@vid_stream: +@inbuf: +@size: +@encoder_state: +@Returns: + + + + + + + + +imdct + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@obj: + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@name: +@Returns: + + + + + + +@vid_stream: +@Returns: + + + + + + + + + + + + + + + + +@vs: +@o: +@i: + + + + + + +@parseavi: +@pad_nr: +@strf: +@Returns: + + + + + + + + + + + + + + + + + + +@enc: +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: +@Returns: + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@b: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@index: +@matrix: + + + + + + +@matrix: +@newmatrix: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@Returns: + + + + + + + + + + + + +@fr: +@no: +@Returns: + + + + + + + + +acconfig + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@txt: + + + + + + + + + + + + +@vid_stream: + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@matrix: +@qptr: +@qfact: + + + + + + +@vs: + + + + + + + + + + + + + + + + + + + + + + +@buf: +@n: +@h: +@Returns: + + + + + + + + + + + + + + + + + + + + + + +@matrix: +@qptr: +@qfact: + + + + + + + + + + + + + + + + + + + + +exponent + + + +getvlc + + + + + + + + + + + + + +@riff: +@buf: +@off: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Param1: +@Returns: + + + + + + + + + + + + +@matrix: +@newmatrix: + + + + + + + + + + + + + + + + + + +@index: +@value: + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@b: + + + + + + + + + + + + +@length: +@original_length: +@frame_type: +@PTS: +@DTS: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@coef: +@LocalEHuff: + + + + + + + + + + + + + + +config + + + + + + + +@sp: +@bp: +@Returns: + + + + + + +@vid_stream: +@n: +@b: + + + + + + + + + + + + + + + + +@image: + + + + + + + + + + + + + + + + + + + + + + + + +@gb: +@dct_coeff_tbl: +@run: +@level: + + + + + + + + + + + + +@vid_stream: + + + + + + +@name: +@Returns: + + + + + + +@name: +@Returns: + + + + + + +@bs: +@Returns: + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + +@matrix: + + + + + + + + + + + + + + + + + + + + + + + + +@fmt: +@Varargs: + + + + + + + + + + + + + + + + + + +@Varargs: +@Varargs: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@index: +@matrix: + + + + + + + + + + + + +@vid_stream: + + + + + + +@de: +@scale: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +system + + + + + + + + @@ -24,66 +1707,57 @@ @ES_rate: @trick_mode_control: - + -@sector: -@pack: -@sys_header: -@packet_size: -@inputbuffer: -@type: -@buffer_scale: -@buffer_size: -@buffers: -@PTS: -@DTS: -@timestamps: -@which_streams: +@mb: +@size: - - - - - - - - - -@x: -@y: -@mask: -@XIob: - - - - - - -@value: -@m1: - - - - - - - - - - - - - - + @vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -92,52 +1766,133 @@ @name: @Returns: - + + + + + +@Param1: +@Varargs: + + + + + + +@vid_stream: +@fnum: +@Returns: + + +debug + + + - + + + + + -@cobin: +@offset: +@id: +@size: - - - - - -@matrix: - - -bit_allocate - - - - - - - -@pad: -@buf: - - + - + + + + + +@obj: + + + + + + +@pb: +@len: + + +htable + + + + + + + +@sp: +@bp: + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: +@Returns: + + + + + + + + + + + + + + + + + + -@matrix: -@qptr: -@qfact: @@ -145,42 +1900,42 @@ bit_allocate - + - - - - - -@mp: - - + - - - - - + +@var: +@lo: +@hi: +@str: - + +musicin + + + +@vid_stream: +@pmem: +@fmem: - + @@ -193,976 +1948,6 @@ bit_allocate @Returns: - - - - - - - - - - - -@sink: -@Returns: - - - - - - - - - - - - -@width: -@height: -@Returns: - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - -@syncinfo: - - - - - - - - - - - - - - - - - - -@riff: -@Returns: - - - - - - -@obj: - - - - pads - - test - - - - - - - - - - - - - - - -@vs: - - - - - - -@s: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - -@Returns: - - - - - - - - - - -@Returns: - - - - - - -@name: -@Returns: - - -globals - - - - - - - -@matrix: -@newmatrix: - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@Returns: - - - - - - -@vid_stream: -@filename: - - - - - - - - - - - - - - -csize - - - -mem - - - - - - - -@dt: -@out0: -@out1: -@samples: - - - - - - - - - - - - - - - - - - - - - - - - -@fd: -@Returns: - - - - - - - - - - - - -@mb: - - -RTjpeg - - - - - - - - - - - - - - - - - - - - - -mpeg2enc - - - - - - - - - - - - - -@val: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@distance: - - - - - - - - - - - - - - - - - - - - - - -@audblk: -@coeffs: - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - -@vid_stream: -@index: -@matrix: - - - - - - - - - - - - - - - - - - -@bsi: -@audblk_t: -@coeffs: -@samples: - - - - - - - - - - - - - - - - - - - - - - -@matrix: -@qptr: -@qfact: - - - - - - -@info: - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - -@m1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Param1: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@fr: -@bandPtr: -@samples: -@pnt: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@mb: -@buf: - - - - - - - - - - - - - - - - -@type: -@id: -@Returns: - - - - - - - - - - - - -@vid_stream: -@index: -@matrix: - - - - - - - - - - - - -@matrix: - - - - - - -@window: -@gc: -@image: -@xsrc: -@ysrc: -@wsrc: -@hsrc: -@xdest: -@ydest: -@wdest: -@hdest: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - -@codec: -@width: -@height: -@planes: -@bit_cnt: -@Returns: - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - - @@ -1170,28 +1955,48 @@ mpeg2enc @named_st: - + + + +@gb: +@coded_bp: - + - + - + -@Returns: +@gstvideosink: the object which received the signal. +@arg1: + + + + + + + + + + + + +@pb: +@buffer: +@len: @@ -1208,1837 +2013,37 @@ mpeg2enc @ox: @oy: - + - - - - - - - - - - - -@Returns: - - -l2tables - - - - - - - - - - - - - -@h: -@framebytes_arg: -@reduction_code: -@transform_code: -@convert_code: -@freq_limit: -@Returns: - - -grab - - - - - - - -@vid_stream: - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@pad: -@buf: - - - - - - -@Q: - - - - - - - - -bitstream - - - - - - - - - -exponent - - - + @obj: - - - - - - - - - - - - - - - - - -@widget: -@width: -@height: - - - - - - -@pb: -@len: - - - - - - -@obj: - - + @vid_stream: -@data: -@size: -@state: -@Returns: - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - -@Param1: - - - - - - - - - - - - - - -encoder - - - - - - - -@Returns: - - - - - - -@vid_stream: - - - - - - -@de: -@inbuf: -@inlen: -@outbuf: -@outlen: -@Returns: - - - - - - - - - - - - - - - - - - -@obj: - - - - - - - - - - - - - - - - - - - - -mpeg2dec - - - - - - - -@buf: -@rgb: - - -param - - - - - - - - - - - - - -@parseavi: -@buf: - - - - - - - - - - - - -@widget: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - -parse - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - -@gb: -@macro_val: - - - - - - -@buf: -@rgb: - - - - - - - - -stats - - - - - - - - - - - - - -@gb: -@quant: -@motion_fwd: -@motion_bwd: -@pat: -@intra: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@gb: -@quant: -@motion_fwd: -@motion_bwd: -@pat: -@intra: - - - - - - -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@gb: -@quant: -@motion_fwd: -@motion_bwd: -@pat: -@intra: - - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@mp: - - - - - - - - - - - - - - - - - - -@bsi: -@audblk: -@gb: - - - - - - -@buf: -@rgb: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@fnum: -@Returns: - - - - - - -@Returns: - - - - - - -@vid_stream: -@val: @huff: @Returns: - - - - - - - - - - - - - - - - - - - - - - - -@sp: -@bp: - - - - - - - - - - - - - - - - - - -@huff: - - - - - - - - - - - - -@matrix: - - - - - - - - - - - - - - - - - - - - - - - - -@obj: - - - - - - -@vid_stream: - - - - - - - - - - - - -@ptr: -@index: -@value: - - - - - - - - - - -@Returns: - - - - - - - - - - - - - - - - -@enc: -@inbuf: -@outbuf: -@outlen: -@Returns: - - - - - - -@Param1: -@Param2: - - - - - - -@Returns: - - - - - - -@Varargs: - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - -ac3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@bsi: -@samples: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@filename: -@pwidth: -@pheight: -@width: -@height: -@omem: -@Returns: - - - - - - - - - - - - - - - - -@bs: -@Returns: - - -GtkOverlayImage - - - - - - - - - - - - - -@matrix: -@newmatrix: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vs: - - - - - - - - - - - - -@klass: - - - - - - -@pad: -@buf: - - - - - - -@pad: -@buf: - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - -@fr: -@bits: - - - - - - -@var: -@lo: -@hi: -@str: - - - - - - -@de: -@scale: - - - - - - -@audblk: - - - - - - -@fr: -@Returns: - - - - - - -@buf: -@n: -@h: -@br: -@Returns: - - - - - - -@buf: -@n: -@h: -@br: -@searchForward: -@Returns: - - - - - - - - - - - - - - - - -@value: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - - - - - -@filename: -@mem: -@Returns: - - - - - - -@Returns: - - - - - - -@DVDSRC_OPEN: - - - - - - - - - - -@fmt: -@Varargs: - - - - - - - - - - -@Returns: - - - - - - - - - - - - -@huff: - - - - - - - - - - - - - - - - - - - - - - - - -@x: -@y: - - - - - - - - - - -@id: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@b: - - - - - - -@pad: -@buf: - - -decode - - - - - - - - - - - - - - - - - - - - - - - - - -common - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@n: -@b: - - - - - - - - -mhead - - - - - - - - - - - - - -@pb: -@Returns: - - -port - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pack: -@SCR: -@mux_rate: - - - - - - - - - - - - -@pad: -@Returns: - - - - - - -@mb: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - - - - - -@vid_stream: -@store: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - -@Varargs: -@Param2: - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - - - - - - - -@wFormatTag: -@wChannels: -@dwSamplesPerSec: -@dwAvgBytesPerSec: -@wBlockAlign: -@wBitsPerSample: - - - - - - - - - - - - - - -dvd_udf - - - + +@syncinfo: @gb: -@dct_coeff_tbl: -@run: -@level: - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - -@vid_stream: -@matrix: -@XIob: -@YIob: - - - - - - - - -qtables - - - - - - - -@Returns: - - - - - - - - - - - - -@image: -@val: - - - - - - - - - - - - -@Returns: - - - - - - -@vid_stream: -@matrix: -@XIob: - - -musicin - - - - - - - -@filename: -@width: -@height: -@omem: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@index: - - + @@ -3056,1237 +2061,35 @@ musicin @bsi: @gb: - - - - - - - - - - - -@x: -@y: - - - - - - - - - - - - -@info: - - - - - - -@matrix: -@qptr: -@qfact: - - - - - - - - - - - - - - - - - - - - - - - - -@fr: -@Param2: - - - - - - - - - - - - - - - - - - -@gb: -@val: - - - - - - - - - - - - - - - - - - -@riff: -@buf: -@off: -@Returns: - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@fr: -@header: -@Returns: - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - -@vid_stream: -@distance: - - - - - - - - - - - - -@table: - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - -@GST_V4LSRC_OPEN: - - - - - - -@Returns: - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - -@image: -@x_shm_info: -@im_adaptor: -@im_port: -@im_format: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Varargs: -@Varargs: -@Returns: - - - - - - - - - - - - -@fr: -@bandPtr: -@channel: -@out: -@nb_blocks: -@Returns: - - - - - - -@vid_stream: -@inbuf: -@size: -@encoder_state: -@Returns: - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vs: -@o: -@i: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@h: -@framebytes_arg: -@reduction_code: -@transform_code: -@convert_code: -@freq_limit: -@Returns: - - - - - - -@vid_stream: -@fs: -@index: - - - - - - -@imatrix: -@omatrix: - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - -@VCDSRC_OPEN: - - - - - - -@vid_stream: -@store: - - - - - - - - - - - - -@bsi: - - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - -@bs: -@pcmbuf: -@Returns: - - - - - - -@vid_stream: -@Returns: - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@fr: -@Returns: - - - - - - - - - - - - -@fr: -@Returns: - - - - - - -@m1: -@m2: - - - - - - - - - - - - -@fr: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - - - - - -@vid_stream: -@fs: - - - - - - -@Returns: - - - - - - - - - - - - -@bandPtr: -@channel: -@out: -@Returns: - - - - - - - - - - - - -@pb: -@val: -@n: - - - - - - -@Returns: - - - - - - - - - - - - -@sp: -@bp: -@Returns: - - - - - - -@vid_stream: -@inbuf: -@inlen: -@first: -@Returns: - - - - - - -@Returns: - - - - - - -@i: - - - - - - - - - - - - - - - - - - -@Param1: -@Param2: -@Returns: - - - - - - -@Returns: - - - - - - -@obj: - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@Returns: - - - - - - -@bs: -@num_bits: -@Returns: - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - -vlc - - - - - - - -@vid_stream: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@filename: -@extname: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Param1: -@Param2: - - - - - - - - - - - - -@fr: -@no: -@Returns: - - - - - - - - -putbits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@sp: -@bp: -@lmask: -@Returns: - - - - - - - - - - - - - - - - - - -@pb: - - - - - - - - -marker - - - - - - - - - - - - - - - - - - - - - - - - -@image: - - - - - - - - - - - - -@vid_stream: -@hp: -@vp: -@h: -@v: -@Returns: - - + - - - - - -output - - - + - + -@mb: -@scr: -@Returns: - + - + @@ -4298,210 +2101,6 @@ output - - - - - -@riff: -@Returns: - - - - - - - - -GtkXvImage - - - - - - - -@mb: - - - - - - - - -L3 - - - - - - - -@Returns: - - - - - - - - - - - - - - - - - - -@stream_id: -@STD_buffer_bound_scale: -@STD_buffer_size_bound: - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - -dga - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4523,102 +2122,80 @@ dga @buffer2_size: @which_streams: - - - - - - - - - - - -@Param1: - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - - - - - -@Varargs: - - -dct - - - + +mantissa + + + +@vid_stream: +@LocalDHuff: @Returns: - + - + +video + + + - + + + + + +@matrix: +@newmatrix: + + - - - - - -@Param1: -@Param2: - - + - + - + + + + + + + + + + + + + + + + + + + @@ -4630,40 +2207,1014 @@ dct - + + + + + + + + + + + + + + + + + + + + + +@src: + + + + + + + + + + + + +@id: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + +@name: +@Returns: + + +dither + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + +@vid_stream: +@fs: @index: + + + + + + + + + + + + @value: + + + + + +@pb: +@val: +@n: + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + +@klass: + + + + + + +@mb: + + + + + + + + + + + + + + +mhead + + + + + + + + + + + + + + + + + + + +@gb: +@macro_val: + + + + + + + + + + + + +@fr: +@Param2: + + + + + + +@name: + + + + + + + + + + + + + + + + + + +@vs: +@o: +@i: + + + + + + + + + + + + +@huff: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@sp: +@bp: +@lmask: +@Returns: + + + + + + +@audblk: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@widget: + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + +@vid_stream: +@Returns: + + + + + + +@imatrix: +@omatrix: + + + + + + + + + + + + + + +stream + + + + + + + + + + + + + +@vid_stream: +@Returns: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +bit_allocate + + + + + + + +@vid_stream: + + +ctables + + + + + + + +@mb: + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + +@fr: +@Returns: + + + + + + +@name: +@Returns: + + + + + + +@fr: +@Returns: + + + + + + + + + + +@fr: +@Returns: + + +mpg123 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@filename: +@Returns: + + + + + + + + + + + + +@fd: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@outbfr: +@outbase: +@temp: +@outcnt: +@bytecnt: +@len: +@newlen: + + + + + + +@blk: +@i_quant_mat: +@Returns: + + + + + + +dvd_udf + + + + + + + +@Param1: +@Returns: + + + + + + + + + + + + +@info: + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@Returns: + + + + + + +@window: +@gc: +@image: +@xsrc: +@ysrc: +@wsrc: +@hsrc: +@xdest: +@ydest: +@wdest: +@hdest: + + + + + + + + + + + + +@gstwinenc: the object which received the signal. +@arg1: + + + + + + + + + + + + +@x: +@coef: + + + + + + + + + + + + + + + + + + +@type: +@byte_order: +@width: +@height: +@depth: +@bpp: +@bpl: +@mem: + + +ring_buffer + + + + + + + +@syncinfo: + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + +@bsi: +@audblk: +@gb: + + + + + + + + + + + + +@vid_stream: + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@mb: +@scr: +@Returns: + + +mpeg2enc + + + + + + + + + + + + + +@matrix: +@qptr: +@qfact: + + +port + + + + + + + +@vid_stream: +@RefFS: +@NewFS: + + + + + + + + + + + + + + + + + + + + + + + + + + +proto + + + + + + + + + + + + + + + +gstriff + + + + + + + + + + + + + + + + + + - + - -itype - - - -uncouple - - - + + + + + + +@m1: +@m2: + @@ -4672,180 +3223,261 @@ uncouple @vid_stream: @index: - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@parseavi: -@pad_nr: -@strf: -@Returns: - - - - - - - - - - - - -@Param1: -@Varargs: -@Varargs: -@Returns: - - - - - - -@length: -@original_length: -@frame_type: -@PTS: -@DTS: - - - - - - - - - - - - - - - - - - -@matrix: -@qptr: -@qfact: - - + @vid_stream: -@huff: +@tc: @Returns: - + - + - -main + - + + + + + + + + + + + + + + + + + + +@Param1: + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + +@Param1: +@Returns: + + +marker + + + + + + + + + + + + + + + + + + + +@h: +@framebytes_arg: +@reduction_code: +@transform_code: +@convert_code: +@freq_limit: +@Returns: + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@store: + + @Returns: - + + + + + +@GST_V4LSRC_OPEN: + + + + + + +@Returns: + + - + - + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + +@vid_stream: + + + + + + + + + + + + +@filename: +@mem: +@Returns: + + + + + + +@riff: +@fourcc: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + @bs: -@pcm: +@num_bits: @Returns: - + - -video - - - - - - - - - + - - - - - - - - - - - - - + @@ -4859,170 +3491,25 @@ video @Param1: @Param2: - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@flag: - - - - - - -@sp: -@bp: - - - - - - - - - - - - -@Param1: - - - - - - -@sp: -@bp: - - - - - - -@Returns: - - - - - - -@bs: - - - - - - - - - - - - -@syncinfo: -@gb: - - - - - - - - - - - - -@mb: - - - - - - - - - - - - - - - - - - -@Param1: - - - - - - - - + @@ -5030,77 +3517,17 @@ video @pad: @buf: - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - -ctables - - - - - - - -@obj: - - - - - - -@src: - - - - - - - - - - - - - - + @@ -5130,89 +3557,107 @@ ctables - + - - - - - - - - - - - - - + +@buf: +@n: +@h: +@br: @Returns: - + -@pad: @buf: +@n: +@h: +@br: +@searchForward: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + tables - - - - - -@fscod: -@bsi: -@audblk: - - - - - - -@vid_stream: - - + - + - - - - - + -@vid_stream: - -stream + +output - + + + + + + + + + +@bs: +@pcm: +@Returns: + + + + + + +@riff: +@Returns: @@ -5226,61 +3671,526 @@ stream @pnt: @Returns: - + + + + + +@Param1: + + + + + + +GtkOverlayImage + + + - + - - - - - - - - - -@mb: - - + - + + + + + +@huff: + + + + + + +@vid_stream: + + + + + + + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@fmcmatrix: +@bmcmatrix: +@imcmatrix: +@XIob: +@YIob: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +csize + + + + + + + + + + + + + +@fscod: +@bsi: +@audblk: + + + + + + + + + + +@Varargs: +@Varargs: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + +stats + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + +@obj: + + + + + + + + + + + + +@filename: +@width: +@height: +@omem: +@Returns: + + + + + + +@x: +@y: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + +size + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@pb: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@a: +@b: +@samples: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @Param1: @Param2: -@Param3: - - - - - + +@pad: +@buf: - + +@vid_stream: - + @@ -5292,27 +4202,1064 @@ stream - + - + + + + + +@name: +@Returns: + + +putbits + + + - - - - - + +@fr: +@Returns: + + +itype + + + + + + + + + + + + + + + +decode + + + + + + + +@vid_stream: +@flag: + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@mb: +@buf: + + + + + + + + +bitstream + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@Varargs: + + + + + + +@Returns: + + + + + + + + +prototypes + + + + + + + +@vid_stream: +@Returns: + + +L3 + + + + + + + +@data: + + + + + + + + + + + + + + + + + + +@pad: +@Returns: + + + + + + +@klass: + + + + + + + + + + + + + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + +encoder + + + + + + + +@de: +@inbuf: +@inlen: +@outbuf: +@outlen: +@Returns: + + + + + + +@fr: +@bits: + + + + + + + + + + + + +@matrix: + + + + + + + + + + + + +@vid_stream: +@filename: + + + + + + +@vid_stream: +@n: +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + +parse + + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@bsi: + + + + + + + + + + + + + + +tableawd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@matrix: +@XIob: +@YIob: + + + + + + + + + + + + + + + + + + +@matrix: + + + + + + + + + + + + + + + + +@matrix: +@qptr: +@qfact: + + + + + + + + + + + + +@fr: +@bandPtr: +@channel: +@out: +@nb_blocks: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@mp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@gstmpeg_play: the object which received the signal. +@arg1: + + + + + + + + + + + + + + + + pads + + test + + + + + + + + + +@Varargs: +@Param2: + + + + + + +@image: +@val: + + + + + + +@buf: +@rgb: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + +@name: +@Returns: + + + + + + + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + +@DVDSRC_OPEN: + + + + + + + + + + +@vs: + + + + + + + + + + + + + + + + + + +@obj: + + + + + + +@mp: + + + + + + +@obj: + + + + + + +@vid_stream: + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@vid_stream: +@Returns: + + + + + + +@enc: +@inbuf: +@outbuf: +@outlen: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@riff: +@Returns: + + + + + + +@x: +@y: +@mask: +@XIob: + + + + + + + + + + + + +@i: + + + + + + + + + + + + +@mb: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Varargs: +@Param2: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + +@m1: + + + + + + + + + + + + + + + + + + +@riff: +@number: +@Returns: + + + + + + + + + + + + +@Returns: @@ -5328,14 +5275,289 @@ stream - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@fr: +@Returns: + + + + + + + + + + + + + + + + + + + + +common + + + + + + + + + + + + + + + + + + + + + + + +@file: +@Returns: + + @vid_stream: - + + + + + +@vid_stream: +@index: +@matrix: + + + + + + +@mb: + + +rematrix + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@hp: +@vp: +@h: +@v: +@Returns: + + + + + + +@bsi: +@audblk_t: +@coeffs: +@samples: + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + +@name: +@Returns: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +buffer + + + + + + + + + + + + + + + + + + + + + + + + + +@sink: +@Returns: + + + + + + + + @@ -5347,216 +5569,27 @@ stream - + -@vid_stream: - + -@name: +@width: +@height: @Returns: - + - - - - - - - - - - - -@txt: - - - - - - - - - - - - -@mb: -@size: - - - - - - -@file: -@Returns: - - -size - - - - - - - -@name: -@Returns: - - - - - - -@name: -@Returns: - - - - - - - - - - - - -@b: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@mp: - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@obj: - - - - - - -@obj: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@Returns: - @@ -5573,11 +5606,20 @@ size @hi: @str: - + +@parseavi: +@buf: + + + + + + +@Varargs: @@ -5585,26 +5627,37 @@ size - + - + - + -@vid_stream: - + + + + + + + + + + + + + @@ -5618,968 +5671,7 @@ size @gb: @value: - - - - - -@imatrix: -@omatrix: - - - - - - -@bsi: -@audblk: -@gb: - - - - - - -@Varargs: -@Varargs: -@Returns: - - - - - - - - - - - - - - -tableawd - - - -debug - - - - - - - -@Param1: -@Returns: - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - -proto - - - - - - - - - - - - - - - -acconfig - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Varargs: -@Param2: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@tc: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - -@Param1: -@Returns: - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - - - - - - - -@image: -@val: - - - - - - -@buf: -@rgb: - - - - - - -@info: - - - - - - -@pad: -@buf: - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - -@vid_stream: -@Returns: - - - - - - -@vid_stream: -@Returns: - - - - - - - - - - - - -@vid_stream: -@filename: - - - - - - -@vid_stream: -@index: -@matrix: - - - - - - -@matrix: -@newmatrix: - - - - - - - - - - - - -@pad: -@buf: - - -htable - - - - - - - - - - - - - - - - - -@vid_stream: -@hp: -@vp: -@h: -@v: - - - - - - - - -gstriff - - - - - - - -@vid_stream: - - - - - - - - - - - - - - -crc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -downmix - - - - - - - - - - - - - - - - - - - -@filename: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - -config - - - - - - - -@buf: -@rgb: - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - - - - - - - -@blk: -@i_quant_mat: -@Returns: - - - - - - - - - - - - - - - - - - -gdkxvimage - - - - - - - - - - - - - -@offset: -@id: -@size: - - - - - - - - - - - - -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@data: - - - - - - - - - - - - -@vid_stream: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@index: -@matrix: - - - - - - - - - - - - -@Param1: -@Param2: -@Returns: - - - - - - -@pb: -@buffer: -@len: - - - - - - - - - - - - -@h: -@framebytes_arg: -@reduction_code: -@transform_code: -@convert_code: -@freq_limit: -@Returns: - - - - - - - - - - - - -@enc: -@Returns: - - - - - - - - - - - - -@Returns: - - - - - - -@vid_stream: -@coef: -@LocalEHuff: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@value: -@flag: - - - - - - - - - - - - -@vid_stream: - - - - - - -@buf: -@n: -@h: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - -@vid_stream: - - - - - - -@Varargs: -@Param2: - - - - - - - - - - - - -buffer - - - - - - - -@cobin: - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@type: -@width: -@height: -@Returns: - - - - - - - - - - - - - - - - - - - - + @@ -6596,9 +5688,1231 @@ buffer @mem: @Returns: - + +main + + + + + +@Returns: + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + +@filename: +@pwidth: +@pheight: +@width: +@height: +@omem: +@Returns: + + + + + + +@vid_stream: +@Returns: + + + + + + + + +GtkXvImage + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + +@vid_stream: +@data: +@size: +@state: +@Returns: + + +jdw + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@bsi: +@audblk: +@coeffs: + + + + + + +@sector: +@pack: +@sys_header: +@packet_size: +@inputbuffer: +@type: +@buffer_scale: +@buffer_size: +@buffers: +@PTS: +@DTS: +@timestamps: +@which_streams: + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@bandPtr: +@channel: +@out: +@Returns: + + + + + + + + + + + + + + + + +@vid_stream: +@index: + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + +@vid_stream: + + + + + + + + + + + + +@VCDSRC_OPEN: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@image: +@x_shm_info: +@im_adaptor: +@im_port: +@im_format: + + + + + + + + + + + + + + + + +@mp: + + + + + + +@vid_stream: +@index: +@matrix: + + + + + + +@Returns: + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Varargs: +@Param2: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@ptr: +@index: +@value: + + + + + + + + + + + + +@syncinfo: +@gb: + + + + + + +@Param1: +@Varargs: +@Varargs: +@Returns: + + + + + + + + + + + + +@imatrix: +@omatrix: + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@filename: + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + + + + + + + +@Param1: +@Param2: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +downmix + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@bsi: +@audblk: +@coeffs: + + + + + + +@vid_stream: + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + +@gb: +@runval: +@levelval: + + + + + + + + + + + + +@buf: +@rgb: + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@sp: +@bp: +@lmask: +@cmask: +@Returns: + + + + + + + + + + + + + + +stamp + + + + + + + +@gb: +@quant: +@motion_fwd: +@motion_bwd: +@pat: +@intra: + + +dct + + + + + + + +@syncinfo: +@bsi: + + + + + + +@obj: + + + + + + + + + + + + +@gb: +@quant: +@motion_fwd: +@motion_bwd: +@pat: +@intra: + + + + + + +@obj: + + + + + + +@pad: +@buf: + + + + + + +@Returns: + + + + + + + + + + + + + + + + +@gb: +@quant: +@motion_fwd: +@motion_bwd: +@pat: +@intra: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + +@bsi: +@audblk: +@gb: + + + + + + + + + + + + + + +huffman + + + + + + + + + +param + + + + + + + + + + + + + + + + + + + +l2tables + + + + + + + + + + + + + +@value: +@m1: + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Param1: + + + + + + +@Returns: + + + + + + +@Returns: + + + + + + +@Param1: +@Returns: + + + + + + + + + + + + + + + + + + +@mb: + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@matrix: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: + + +mem + + + + + + + +@vid_stream: + + + + + + + + +grab + + + + + + + +@table: + + + + + + + + + + + + @@ -6609,6 +6923,839 @@ buffer @pcm: @Returns: + + + + + +@pb: + + + + + + + + + + + + + + + + + + +@wFormatTag: +@wChannels: +@dwSamplesPerSec: +@dwAvgBytesPerSec: +@wBlockAlign: +@wBitsPerSample: + + + + + + +@gb: +@macro_val: + + + + + + + + + + + + +@Param1: +@Param2: +@Returns: + + + + + + + + + + + + +@val: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@pad: +@buf: + + + + + + +@cobin: + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: +@store: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@fr: +@header: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@buf: +@rgb: + + + + + + + + + + + + +@ptr: +@index: +@value: + + + + + + + + +RTjpeg + + + + + + + +@filename: +@extname: +@Returns: + + + + + + + + + + + + +@fourcc: +@Returns: + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@Returns: + + + + + + +@widget: +@width: +@height: + + + + + + + + + + + + + + + + +@bs: +@pcmbuf: +@Returns: + + + + + + + + + + + + +@matrix: + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + +@pb: + + + + + + +@pad: +@buf: + + + + + + + + + + + + + + + + + + +@vid_stream: +@distance: + + +core + + + + + + + + + + + + + +@dt: +@out0: +@out1: +@samples: + + + + + + +@Param1: +@Param2: + + +vlc + + + + + + + + + + + + + +@fr: +@bandPtr: +@samples: +@pnt: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: +@val: +@huff: +@Returns: + + + + + + +@vid_stream: +@source: +@dest: + + + + + + +@name: +@Returns: + + + + + + + + + + + + +@cobin: + + + + + + + + +qtables + + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@vid_stream: + + + + + + + + + + + + + + +mpeg2dec + + + + + + + + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@sp: +@bp: + + + + + + +@Param1: +@Param2: + + + + + + +@sp: +@bp: + + + + + + +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@form: +@chunks: +@state: +@curoffset: +@nextlikely: + + + + + + +@Param1: + + + + + + + + + + + + + + + + + + +@Param1: +@Varargs: + @@ -6616,42 +7763,46 @@ buffer @mem: - + -@vid_stream: -@matrix: -@XIob: -@YIob: +@Q: - + -@vid_stream: -@RefFS: -@NewFS: - + -@vid_stream: -@LocalDHuff: -@Returns: - + +util + + + + + + + + + + + + + + + -@riff: -@fourcc: -@Returns: @@ -6659,7 +7810,438 @@ buffer - + + + + + +@Param1: +@Param2: +@Param3: + + + + + + + + + + + + +@stream_id: +@STD_buffer_bound_scale: +@STD_buffer_size_bound: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Returns: + + + + + + + + + + +@Param1: +@Returns: + + + + + + + + + + + + +@Returns: + + + + + + + + + + + + +@name: +@Returns: + + + + + + +@pad: +@buf: + + + + + + + + + + + + +@vid_stream: +@inbuf: +@inlen: +@first: +@Returns: + + + + + + +@x: +@y: + + + + + + + + + + + + +@info: + + + + + + +@name: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@obj: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@parseavi: +@pad_nr: +@strf: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +dga + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Param1: +@Param2: +@Returns: + + + + + + + + + + + + + + + + + + +@type: +@width: +@height: +@Returns: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@info: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6681,119 +8263,13 @@ buffer @new_frame: @next_frame_time: - + - - - - - -@syncinfo: -@bsi: - - - - - - - - - - - - - - - - - - -@parseavi: -@pad_nr: -@strf: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@matrix: - - - - - - -@fr: -@Returns: - - - - - - - - - - - - -@matrix: - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -6801,446 +8277,7 @@ buffer @pad: @buf: - - - - - - - -huffman - - - -system - - - -ring_buffer - - - - - - - - - - - - - -@vid_stream: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@matrix: -@XIob: - - - - - - - - - - -@pb: - - - - - - - - - - - - -@gb: -@runval: -@levelval: - - - - - - - - - - - - -@buf: -@rgb: - - - - - - - - - - - - -@vid_stream: - - - - - - -@index: -@value: - - -util - - - - - - - -@vid_stream: - - - - - - -@name: -@Returns: - - - - - - - - -getvlc - - - - - - - - - - - - - -stamp - - - - - - - - - - - - - -@vid_stream: -@Returns: - - -prototypes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@pad: -@buf: - - - - - - -@name: -@Returns: - - - - - - - - -mpg123 - - - - - - - - - - - - - -@vid_stream: -@n: -@Returns: - - - - - - - - - - - - -@pad: -@buf: - - - - - - - - - - - - - - - - - - -@bsi: -@audblk: -@coeffs: - - -core - - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - -@Param1: - - - - - - -@klass: - - - - - - - - - - - - -@Param1: -@Varargs: - - - - - - - - - - - - -@outbfr: -@outbase: -@temp: -@outcnt: -@bytecnt: -@len: -@newlen: - - - - - - - - - - -@Param1: -@Varargs: - - - - - - -@vid_stream: - - - - - - -@vid_stream: - - - - - - -@fourcc: -@Returns: - - - - - - -@Param1: -@Returns: - - - - - - -@name: - - -mantissa - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -7252,51 +8289,93 @@ mantissa - + + + + + +@image: +@val: + + + + + + +@vid_stream: +@matrix: +@XIob: + + - + - + - + + + + + +@codec: +@width: +@height: +@planes: +@bit_cnt: +@Returns: + + + + + + +@audblk: +@coeffs: + + + + + + +@Returns: + + - + - -imdct - - - + - + +@name: +@Returns: @@ -7306,694 +8385,17 @@ imdct @pad: @buf: - + - - - - - - - - - - - - - + @vid_stream: -@fmcmatrix: -@bmcmatrix: -@imcmatrix: -@XIob: -@YIob: - - - - - - -@vid_stream: - - - - - - -@gb: -@runval: -@levelval: - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - -@bsi: -@audblk: -@coeffs: - - - - - - - - - - - - -@vid_stream: - - - - - - -@Param1: -@Param2: -@Returns: - - - - - - - - - - - - - - - - - - - - - - -@sp: -@bp: -@lmask: -@cmask: -@Returns: - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@Returns: - - - - - - - - - - - - -@Param1: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@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: - - - - - - -@pad: -@buf: - - - - - - - - - - - - -@type: -@byte_order: -@width: -@height: -@depth: -@bpp: -@bpl: -@mem: - - - - - - - - - - - - -@Param1: -@Param2: - - -rematrix - - - - - - - - - - - - - -@form: -@chunks: -@state: -@curoffset: -@nextlikely: - - - - - - - - - - - - -@ptr: -@index: -@value: - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@a: -@b: -@samples: - - - - - - -@vs: -@o: -@i: - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@header: -@Returns: - - - - - - -decoders - - - - - - - -@x: -@coef: - - - - - - - - - - - - - - - - - - -@riff: -@number: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@syncinfo: -@gb: - - -dither - - - - - - - -@Returns: - - - - - - -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - -@gb: -@macro_val: - - - - - - - - - - - - - - - - - - - - - - -@name: -@Returns: - - - - - - -@vid_stream: -@source: -@dest: - - - - - - - - - - - - - - -jdw - - - - - - - -@vid_stream: - - - - - - -@name: -@Returns: - - - - - - - - - - - - - - - - - - - - - - - - - - -@vid_stream: -@pmem: -@fmem: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@gb: -@coded_bp: - - - - - - - - - - - - +@fs: diff --git a/docs/plugins/tmpl/gstspectrum.sgml b/docs/plugins/tmpl/gstspectrum.sgml index feebe84b6e..a3dc5d38b3 100644 --- a/docs/plugins/tmpl/gstspectrum.sgml +++ b/docs/plugins/tmpl/gstspectrum.sgml @@ -14,8 +14,3 @@ GstSpectrum - - - - - diff --git a/docs/plugins/tmpl/gstv4lsrc.sgml b/docs/plugins/tmpl/gstv4lsrc.sgml index cece4f3cdb..ba14a4f02a 100644 --- a/docs/plugins/tmpl/gstv4lsrc.sgml +++ b/docs/plugins/tmpl/gstv4lsrc.sgml @@ -14,73 +14,3 @@ GstV4lSrc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/plugins/tmpl/gstwindec.sgml b/docs/plugins/tmpl/gstwindec.sgml index b3e9fc4613..e4f1e667f7 100644 --- a/docs/plugins/tmpl/gstwindec.sgml +++ b/docs/plugins/tmpl/gstwindec.sgml @@ -14,13 +14,3 @@ GstWinDec - - - - - - - - - - diff --git a/docs/plugins/tmpl/gstwinenc.sgml b/docs/plugins/tmpl/gstwinenc.sgml index 2a4997b045..8e8fe36422 100644 --- a/docs/plugins/tmpl/gstwinenc.sgml +++ b/docs/plugins/tmpl/gstwinenc.sgml @@ -14,36 +14,3 @@ GstWinEnc - - - - - -@gstwinenc: the object which received the signal. -@arg1: - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/plugins/tmpl/median.sgml b/docs/plugins/tmpl/median.sgml index aa35882720..1408d68318 100644 --- a/docs/plugins/tmpl/median.sgml +++ b/docs/plugins/tmpl/median.sgml @@ -14,13 +14,3 @@ GstMedian - - - - - - - - - - diff --git a/docs/plugins/tmpl/mp3parse.sgml b/docs/plugins/tmpl/mp3parse.sgml index 6836a94154..07d6078e59 100644 --- a/docs/plugins/tmpl/mp3parse.sgml +++ b/docs/plugins/tmpl/mp3parse.sgml @@ -14,8 +14,3 @@ Mp3Parse - - - - - diff --git a/docs/plugins/tmpl/mpeg1parse.sgml b/docs/plugins/tmpl/mpeg1parse.sgml index a77682a3d2..de8497daff 100644 --- a/docs/plugins/tmpl/mpeg1parse.sgml +++ b/docs/plugins/tmpl/mpeg1parse.sgml @@ -14,8 +14,3 @@ Mpeg1Parse - - - - - diff --git a/docs/plugins/tmpl/mpeg2parse.sgml b/docs/plugins/tmpl/mpeg2parse.sgml index fafd52ecf5..a2533ccd79 100644 --- a/docs/plugins/tmpl/mpeg2parse.sgml +++ b/docs/plugins/tmpl/mpeg2parse.sgml @@ -14,8 +14,3 @@ Mpeg2Parse - - - - - diff --git a/docs/plugins/tmpl/mpeg2subt.sgml b/docs/plugins/tmpl/mpeg2subt.sgml index b70dee2bb3..1ce7894105 100644 --- a/docs/plugins/tmpl/mpeg2subt.sgml +++ b/docs/plugins/tmpl/mpeg2subt.sgml @@ -14,8 +14,3 @@ Mpeg2Subt - - - - - diff --git a/docs/plugins/tmpl/smooth.sgml b/docs/plugins/tmpl/smooth.sgml index f4ee1d3066..0828169db4 100644 --- a/docs/plugins/tmpl/smooth.sgml +++ b/docs/plugins/tmpl/smooth.sgml @@ -14,18 +14,3 @@ GstSmooth - - - - - - - - - - - - - - - diff --git a/docs/plugins/tmpl/smoothwave.sgml b/docs/plugins/tmpl/smoothwave.sgml index c9e149c7c5..be5c975f52 100644 --- a/docs/plugins/tmpl/smoothwave.sgml +++ b/docs/plugins/tmpl/smoothwave.sgml @@ -14,18 +14,3 @@ GstSmoothWave - - - - - - - - - - - - - - - diff --git a/docs/plugins/tmpl/stereo.sgml b/docs/plugins/tmpl/stereo.sgml index 09f343c3f8..9f1ed2f8f6 100644 --- a/docs/plugins/tmpl/stereo.sgml +++ b/docs/plugins/tmpl/stereo.sgml @@ -14,13 +14,3 @@ GstStereo - - - - - - - - - - diff --git a/docs/plugins/tmpl/synaesthesia.sgml b/docs/plugins/tmpl/synaesthesia.sgml index ac866565bc..40f34470c6 100644 --- a/docs/plugins/tmpl/synaesthesia.sgml +++ b/docs/plugins/tmpl/synaesthesia.sgml @@ -14,18 +14,3 @@ GstSynaesthesia - - - - - - - - - - - - - - - diff --git a/docs/plugins/tmpl/system_encode.sgml b/docs/plugins/tmpl/system_encode.sgml index 497a7934a8..e342229525 100644 --- a/docs/plugins/tmpl/system_encode.sgml +++ b/docs/plugins/tmpl/system_encode.sgml @@ -14,13 +14,3 @@ System_Encode - - - - - - - - - - diff --git a/docs/plugins/tmpl/videoscale.sgml b/docs/plugins/tmpl/videoscale.sgml index b3b8699d84..f7a0f27634 100644 --- a/docs/plugins/tmpl/videoscale.sgml +++ b/docs/plugins/tmpl/videoscale.sgml @@ -14,13 +14,3 @@ Videoscale - - - - - - - - - - diff --git a/docs/plugins/tmpl/videosink.sgml b/docs/plugins/tmpl/videosink.sgml index 0dfafbac05..010558b36a 100644 --- a/docs/plugins/tmpl/videosink.sgml +++ b/docs/plugins/tmpl/videosink.sgml @@ -14,42 +14,3 @@ GstVideoSink - - - - - -@gstvideosink: the object which received the signal. - -@arg1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/plugins/tmpl/volume.sgml b/docs/plugins/tmpl/volume.sgml index d285c5c442..cff4b422d8 100644 --- a/docs/plugins/tmpl/volume.sgml +++ b/docs/plugins/tmpl/volume.sgml @@ -14,13 +14,3 @@ GstVolume - - - - - - - - - - diff --git a/docs/plugins/tmpl/vumeter.sgml b/docs/plugins/tmpl/vumeter.sgml index 34abf7a5c8..3816526fa8 100644 --- a/docs/plugins/tmpl/vumeter.sgml +++ b/docs/plugins/tmpl/vumeter.sgml @@ -14,33 +14,3 @@ GstVuMeter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/random/NOTES-0.1.1 b/docs/random/NOTES-0.1.1 new file mode 100644 index 0000000000..348bb74a90 --- /dev/null +++ b/docs/random/NOTES-0.1.1 @@ -0,0 +1,36 @@ + +compile fixes: + + - BSD compatibility fixes (MAP_ANON) + - libxml compile problems fix + - compile fixes for non x86 architectures + (mpg123, mpeg_play, getbits, videoscale, ac3dec) + - mpeg2enc asm comment fixes + +bug fixes: + + - videoscaler/colorconversion fixes + - OSS audiosink bug fix + - reworked the queue threading code + - fixed the /etc/gstreamer permissions problem + - various minor bug fixes + +changes: + + - state change modifications + - _request pad implemented for muxer/mixer/aggregator + elements. also _request_compatible additions. + - massive ghostpad changes + - EOS handling (not for gstmediaplay) + - icecast send plugin using libshout + - lots of GstObject changes (XML save, name, parent + properties fixes) + - preliminary XML namespaces. + - added support for custom app tags in the XML save/load + routines (preliminary support) + - cothreads updates for ALPHA/ARM + - asyncdisksrc is gone in favor of a better disksrc + - getregion rework + - videoscaler/colorconversion updates + - manual/docs updates + diff --git a/docs/random/caps.dia b/docs/random/caps.dia new file mode 100644 index 0000000000..b511083c7a --- /dev/null +++ b/docs/random/caps.dia @@ -0,0 +1,1132 @@ + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GstCaps# + + + + + + + + + + + + + + + + + + + + + + + #name# + + + #gchar *# + + + + + + + + + + + + + + + + + #id# + + + #guint16# + + + + + + + + + + + + + + + + + #properties# + + + #GstProps *# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GstProps# + + + + + + + + + + + + + + + + + + + + + + + #properties# + + + #GList *# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #1# + + + + + + + + + + + + + + #0..1# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #GstPropsEntry# + + + + + + + + + + + + + + + + + + + + + + + #propid# + + + #GQuark# + + + + + + + + + + + + + + + + + #propstype# + + + #GstPropsId# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #1# + + + + + + + + + + + + + + #*# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #boolean# + + + + + + + + + + + + + + + + + + + + + + + #bool_data# + + + #gboolean# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #fourcc# + + + + + + + + + + + + + + + + + + + + + + + #fourcc_data# + + + #guint32# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #int# + + + + + + + + + + + + + + + + + + + + + + + #int_data# + + + #gint# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #list# + + + + + + + + + + + + + + + + + + + + + + + #entries# + + + #GList *# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #int_range# + + + + + + + + + + + + + + + + + + + + + + + #min# + + + #gint# + + + + + + + + + + + + + + + + + #max# + + + #gint# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #union# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #1# + + + + + + + + + + + + + + #*# + + + + + + + + + + + + + + + + diff --git a/docs/random/wtay/caps-negociation b/docs/random/wtay/caps-negociation new file mode 100644 index 0000000000..1207cd9751 --- /dev/null +++ b/docs/random/wtay/caps-negociation @@ -0,0 +1,345 @@ +caps negotiation +================ + +1) purpose +---------- + +The pads expose the media types they can handle using a mime +type and a set of properties. Before the pad is created or +used to pass buffers, we only know the global 'range' of media +data this pad can accept. When the element has had a chance to +look at the media data, only then it knows the exact values of the +properties. + +example1: +! +! The mp3 decoder exposes the capabilities of its src pad +! with the following caps: +! +! 'mpg123_src': +! MIME type: 'audio/raw': +! format: Integer: 16 +! depth: Integer: 16 +! rate: Integer range: 11025 - 48000 +! channels: Integer range: 1 - 2 + +as you can see in example1, the padtemplate has both a range +(for the audio rate) and a list (for the number of channels) +for its properties. + +only when the mpg123 element has decoded the first mpeg audio +header, it knows the exact values of the rate and channels +properties. + +suppose that we want to connect this src pad to the sink pad +of an audiosink with the properties given in example2: + +example2: +! +! 'audiosink_sink': +! MIME type: 'audio/raw': +! format: Integer: 16 +! depth: List: +! Integer: 8 +! Integer: 16 +! rate: Integer range: 8000 - 44000 +! channels: Integer range: 1 - 2 + +we can see that connecting the mpg123 src pad with the +audiosinks sink pad can cause a potential problem with the +rate property. + +When the mpg123 decoder decides to output raw audio with a +48000Hz samplerate, the audiosink will not be able to handle +it. The conservative approach would be to disallow the connection +between the two incompatible pads. This rules out any potential +problems but severely limits the amount of possible connections +between the elements. + +Another approach would be to allow the connection (and mark it +as dangerous) and let the two elements figure out a suitable +media type at runtime. This procedure is called caps negotiation. + + +2) a bit of history +------------------- + +The typing of the data that was attached to a buffer used to be +done using GstMeta* (and it still is as of 11 feb 2001). With +the new GstCaps and GstProps system this typing is gradually moved +to the pads and to the padtemplates. This has several advantages: + + - the typing of the data tends to be static. The type of media + doesn't change for every buffer. + + - Moving the typing up to the pad(templates) allows us to save + them into the registry and allows us to figure out what pads + are compatible. + + - the current metadata implementation needs header files. this may + change when we also use properties for metadata. + +example3: +! +! This is the current GstMeta structure that travels with audio buffers +! +! struct _MetaAudioRaw { +! GstMeta meta; +! +! /* formatting information */ +! gint format; +! gint channels; +! gint frequency; +! gint bps; +! }; + + +The question still remains what purpose the metadata will serve +now that we expose the media type in the pads. Some possibilities: + + - interesting information, not describing the data itself but the + context in which the data was generated (suggested buffer size, + timestamps, etc...) + + - user app metadata. + +In this proposal we also assume that the current use of metadata using +GstMeta is deprecated and that we move this information to the properties +of the pads. + + +3) the pad/padtemplates caps +---------------------------- + +All elements have to provide a padtemplate for their pads. + +The padtemplates provide a range of possible media types this pad can +src/sink. the main purpose for the padtemplates is to allow a +rough guess at which pads are compatible before even a single buffer +has been processed by the element. + +pads are usually created from the templates. When the pad is created +it has no GstCaps* attached to it yet. The possible caps this pad +can have is exposed in the padtemplate. The caps are filled in by +the element when it knows the values for the caps. + + +4) the connect function +----------------------- + +when two pads are connected the following steps will take +placei (not sure, FIXME): + + - if both pads have caps, the caps are checked. If the caps + are incompatible, the padtemplates are checked, if they + are compatible, caps negotiation is performed. + + - if one of the pads has caps, the caps is checked against + the padtemplate of the peer pad. If they are incompatible, + the padtemplates are compared, if they are incompatible, + caps negotiation is performed. + + - if none of the pads have caps, the padtemplates are checked, + if they are incompatible, a warning is issued. + + +5) when the element knows the media type it is handling +------------------------------------------------------- + +When the element has received its first buffer it will know +the media type it is handling by inspecting the buffer. + +before pushing the data out to its peer element(s), the element +will set its src pad with the appropriate caps and properties. +These caps must follow the following rules: + + - the caps must be compatible with the padtemplates of this + pad. + + - the caps cannot contain ranges or lists. + +when the element wants to change the caps of a pad, it has to +perform gst_pad_renegotiate (GstPad *pad). this will trigger +the caps negotiation procedure. + +this will trigger the class method of the pad and calls the pads +gst_pad_negotiate function: + + GstCaps *gst_pad_negotiate (GstPad *pad, GstCaps *caps, guint count); + +This function takes a GstCaps *structure as an argument (typically the +current caps of the pad) and a negotiation counter. this counter can be +used to keep track of the negotiation process. + +The pad then creates a new caps structure with the desired caps. +If the caps are accepted, it just returns the provided input caps. the +_renegotiate function will set the caps of both pads whenever the +input caps are the same (pointer wise) as the input caps. + +the caps structure is checked against the padtemplate of the peer pad, +if it is incompatible the gst_pad_negotiate function is called again +and the element is supposed to create another caps structure. + +the gst_pad_renegotiate function then calls the gst_pad_negotiate +function of the peer pad with the new caps as the argument. The peer +pad can adjust or create a new caps if it doesn't accept it. + +the caps structure keeps on bouncing between the two pads until one +of the pads negotiation functions returns the caps unmodified. + +The element can also return a NULL pointer if it has run out of +options for the caps structure. When this happens, both pads are set +the the NULL caps again and the pad connnection is broken. + +The negotiation process is stopped after a fixed number of tries, +when the counter has reached some limit. This limit is typically +checked by the pads negotiate function. + + +6) caps negotiation function +---------------------------- + +the negotiate function of a pad is called whenever the pad or +peer pad has performed _renegotiate. + +example5: +! +! this is the caps negotiation function implemented by an element on +! one of its sink pads. +! +! static GstCaps* +! gst_pad_negotiate (GstPad *pad, GstCaps *caps, guint counter) +! { +! /* we don't accept anything else than audio/raw */ +! if (strcmp (gst_caps_get_mime (caps), "audio/raw")) +! return NULL; +! +! if (gst_caps_get_int_prop (caps, "format") != AFMT_S16_LE) +! return NULL; +! +! /* we accept everything else */ +! return caps; +! } + +When the negotiate function returns NULL (it does not accept the +specified caps of the peer pad), the negotiation process is stopped. + + + +APPENDIX A: use cases +===================== + +1) mpg123 src!sink audiosink +---------------------------- + +When the pads are connected the padtemplates are checked and it +turns out that the pads might be incompatible (mpg123 can do +48000Hz while audiosink can do 44000Hz). Nothing happens at +connect time except for the user app that can mark this connection +as possibly dangerous and keep some spare elements ready for when +the pads turn out to be incompatible. + +both elements start out with no caps at all (NULL). mpg123 wants +to output a buffer with specific properties. It calls +gst_pad_renegotiate (mpg123->srcpad). + +The _renegotiate functions calls the negotiate function of the +mpg123->srcpad. the negotiate function would look like this: + + +/* + * The mpg123 element cannot convert the decoded type into something + * else so it has to force the caps of the src pad into the specific + * type as defined by the mp3. + */ +static GstCaps* +gst_mpeg123_src_negotiate (GstPad *pad, GstCaps *caps, guint counter) +{ + GstMpg123 *mpg123; + + mpg123 = GST_MPG123 (gst_pad_get_parent (pad)); + + /* we got caps in, check them */ + if (caps != NULL) { + if (!strcmp (gst_caps_get_mime (caps), "audio/raw") && + (gst_caps_get_int_prop (caps, "format") == AFMT_S16_LE) && + (gst_caps_get_int_prop (caps, "depth") == 16) && + (gst_caps_get_int_prop (caps, "rate") == mpg123->rate) && + (gst_caps_get_int_prop (caps, "channels") == mpg123->channels)) { + return caps; + } + } + /* we didn't get caps, so we decide */ + else if (counter != 2) { + GstCaps *new; + + /* fill in our desired caps */ + new = gst_caps_new_with_props ( + "src_caps", /* name */ + "audio/raw", /* mime */ + gst_props_new ( + "format", GST_PROPS_INT (AFMT_S16_LE), + "depth", GST_PROPS_INT (16), + "rate", GST_PROPS_INT (mpg123->rate), + "channels", GST_PROPS_INT (mpg123->channels), + NULL + ) + ); + return caps; + } + /* too many attempts at nogotiation, bail out */ + return NULL; +} + + +The audiosink pad negotiate function would look like this: + +/* + * The audiosink has a wide range of possible parameters for + * its sink pad, based on the audio card capabilities and + * possibly the element configuration. + * we assume the audiosink element can be both the initiator of + * the negotiations and the negotiated one. + */ +static GstCaps* +gst_audiosink_sink_negotiate (GstPad *pad, GstCaps *caps, guint counter) +{ + GstAudiosink *audiosink; + gboolean accepted = TRUE; + + audiosink = GST_AUDIOSINK (gst_pad_get_parent (pad)); + + /* we got caps in, we know they will match the padtemplate */ + if (caps != NULL) { + return caps; + } + /* we didn't get caps, so we decide */ + else if (counter != 2) { + GstCaps *new; + + /* fill in our desired caps */ + new = gst_caps_new_with_props ( + "sink_caps", /* name */ + "audio/raw", /* mime */ + gst_props_new ( + "format", GST_PROPS_INT (audiosink->format), + "depth", GST_PROPS_INT (audiosink->depth), + "rate", GST_PROPS_INT (audiosink->rate), + "channels", GST_PROPS_INT (audiosink->channels), + NULL + ) + ); + return caps; + } + /* too many attempts at nogotiation, bail out */ + return NULL; +} + + + + + + + + + diff --git a/examples/Makefile.am b/examples/Makefile.am index 1b5d86647b..17a14055c2 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,4 +1,4 @@ SUBDIRS = autoplug \ helloworld helloworld2 \ queue queue2 queue3 queue4 \ - launch thread xml plugins + launch thread xml plugins typefind diff --git a/examples/plugins/example.c b/examples/plugins/example.c index b958272bb1..00cf8c19d7 100644 --- a/examples/plugins/example.c +++ b/examples/plugins/example.c @@ -17,9 +17,14 @@ * Boston, MA 02111-1307, USA. */ +/* First, include the header file for the plugin, to bring in the + * object definition and other useful things. + */ #include "example.h" -/* elementfactory information */ +/* The ElementDetails structure gives a human-readable description + * of the plugin, as well as author and version data. + */ static GstElementDetails example_details = { "An example plugin", "Example", @@ -29,30 +34,47 @@ static GstElementDetails example_details = { "(C) 2000", }; -/* Example signals and args */ +/* These are the signals that this element can fire. They are zero- + * based because the numbers themselves are private to the object. + * LAST_SIGNAL is used for initialization of the signal array. + */ enum { + ASDF, /* FILL ME */ LAST_SIGNAL }; +/* Arguments are identified the same way, but cannot be zero, so you + * must leave the ARG_0 entry in as a placeholder. + */ enum { ARG_0, - ARG_ACTIVE + ARG_ACTIVE, + /* FILL ME */ }; +/* The PadFactory structures describe what pads the element has or + * can have. They can be quite complex, but for this example plugin + * they are rather simple. + */ static GstPadFactory sink_factory = { - "sink", /* the name of the pads */ - GST_PAD_FACTORY_SINK, /* type of the pad */ - GST_PAD_FACTORY_ALWAYS, /* ALWAYS/SOMETIMES */ - GST_PAD_FACTORY_CAPS( - "example_sink", /* the name of the caps */ - "unknown/unknown", /* the mime type of the caps */ - "something", GST_PROPS_INT (1), /* a property */ - "foo", GST_PROPS_BOOLEAN (TRUE) /* another property */ + "sink", /* The name of the pad */ + GST_PAD_FACTORY_SINK, /* Direction of the pad */ + GST_PAD_FACTORY_ALWAYS, /* The pad exists for every instance */ + GST_PAD_FACTORY_CAPS( /* This factory has specific capabilities */ + "example_sink", /* The name of the caps */ + "unknown/unknown", /* The overall MIME/type */ + "foo", GST_PROPS_INT (1), /* An integer property */ + "bar", GST_PROPS_BOOLEAN (TRUE), /* A boolean */ + "baz", GST_PROPS_LIST ( /* A list of values for */ + GST_PROPS_INT (1), + GST_PROPS_INT (3) + ) ), - NULL + NULL /* All factories must be NULL-terminated */ }; +/* This factory is much simpler, and defines the source pad. */ static GstPadFactory src_factory = { "src", GST_PAD_FACTORY_SRC, @@ -65,19 +87,35 @@ static GstPadFactory src_factory = { }; -static void gst_example_class_init (GstExampleClass *klass); -static void gst_example_init (GstExample *example); +/* A number of functon prototypes are given so we can refer to them later. */ +static void gst_example_class_init (GstExampleClass *klass); +static void gst_example_init (GstExample *example); -static void gst_example_chain (GstPad *pad, GstBuffer *buf); +static void gst_example_chain (GstPad *pad, GstBuffer *buf); -static void gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id); -static void gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id); +static void gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id); -GstPadTemplate *src_template, *sink_template; +/* These hold the constructed pad templates, which are created during + * plugin load, and used during element instantiation. + */ +static GstPadTemplate *src_template, *sink_template; +/* The parent class pointer needs to be kept around for some object + * operations. + */ static GstElementClass *parent_class = NULL; -//static guint gst_example_signals[LAST_SIGNAL] = { 0 }; +/* This array holds the ids of the signals registered for this object. + * The array indexes are based on the enum up above. + */ +static guint gst_example_signals[LAST_SIGNAL] = { 0 }; + +/* This function is used to register and subsequently return the type + * identifier for this object class. On first invocation, it will + * register the type, providing the name of the class, struct sizes, + * and pointers to the various functions that define the class. + */ GtkType gst_example_get_type(void) { @@ -90,8 +128,8 @@ gst_example_get_type(void) sizeof(GstExampleClass), (GtkClassInitFunc)gst_example_class_init, (GtkObjectInitFunc)gst_example_init, - (GtkArgSetFunc)gst_example_set_arg, - (GtkArgGetFunc)gst_example_get_arg, + (GtkArgSetFunc)NULL, /* These last three are depracated */ + (GtkArgGetFunc)NULL, (GtkClassInitFunc)NULL, }; example_type = gtk_type_unique(GST_TYPE_ELEMENT,&example_info); @@ -99,70 +137,166 @@ gst_example_get_type(void) return example_type; } +/* In order to create an instance of an object, the class must be + * initialized by this function. GtkObject will take care of running + * it, based on the pointer to the function provided above. + */ static void gst_example_class_init (GstExampleClass *klass) { + /* Class pointers are needed to supply pointers to the private + * implementations of parent class methods. + */ GtkObjectClass *gtkobject_class; GstElementClass *gstelement_class; + /* Since the example class contains the parent classes, you can simply + * cast the pointer to get access to the parent classes. + */ gtkobject_class = (GtkObjectClass*)klass; gstelement_class = (GstElementClass*)klass; + /* The parent class is needed for class method overrides. */ parent_class = gtk_type_class(GST_TYPE_ELEMENT); + /* Here we add an argument to the object. This argument is an integer, + * and can be both read and written. + */ gtk_object_add_arg_type("GstExample::active", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_ACTIVE); + /* Here we add a signal to the object. This is avery useless signal + * called asdf. The signal will also pass a pointer to the listeners + * which happens to be the example element itself */ + gst_example_signals[ASDF] = + gtk_signal_new("asdf", GTK_RUN_LAST, gtkobject_class->type, + GTK_SIGNAL_OFFSET (GstExampleClass, asdf), + gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, + GST_TYPE_EXAMPLE); + + gtk_object_class_add_signals (gtkobject_class, gst_example_signals, + LAST_SIGNAL); + + /* The last thing is to provide the functions that implement get and set + * of arguments. + */ gtkobject_class->set_arg = gst_example_set_arg; gtkobject_class->get_arg = gst_example_get_arg; } +/* This function is responsible for initializing a specific instance of + * the plugin. + */ static void gst_example_init(GstExample *example) { + /* First we create the sink pad, which is the input to the element. + * We will use the sink_template constructed in the plugin_init function + * (below) to quickly generate the pad we need. + */ example->sinkpad = gst_pad_new_from_template (sink_template, "sink"); - gst_element_add_pad(GST_ELEMENT(example),example->sinkpad); + /* Setting the chain function allows us to supply the function that will + * actually be performing the work. Without this, the element would do + * nothing, with undefined results (assertion failures and such). + */ gst_pad_set_chain_function(example->sinkpad,gst_example_chain); + /* We then must add this pad to the element's list of pads. The base + * element class manages the list of pads, and provides accessors to it. + */ + gst_element_add_pad(GST_ELEMENT(example),example->sinkpad); + /* The src pad, the output of the element, is created and registered + * in the same way, with the exception of the chain function. Source + * pads don't have chain functions, because they can't accept buffers, + * they only produce them. + */ example->srcpad = gst_pad_new_from_template (src_template, "src"); gst_element_add_pad(GST_ELEMENT(example),example->srcpad); + /* Initialization of element's private variables. */ example->active = FALSE; } +/* The chain function is the heart of the element. It's where all the + * work is done. It is passed a pointer to the pad in question, as well + * as the buffer provided by the peer element. + */ static void gst_example_chain (GstPad *pad, GstBuffer *buf) { GstExample *example; + GstBuffer *outbuf; + /* Some of these checks are of dubious value, since if there were not + * already true, the chain function would never be called. + */ g_return_if_fail(pad != NULL); g_return_if_fail(GST_IS_PAD(pad)); g_return_if_fail(buf != NULL); - //g_return_if_fail(GST_IS_BUFFER(buf)); + /* We need to get a pointer to the element this pad belogs to. */ example = GST_EXAMPLE(gst_pad_get_parent (pad)); + /* A few more sanity checks to make sure that the element that owns + * this pad is the right kind of element, in case something got confused. + */ g_return_if_fail(example != NULL); g_return_if_fail(GST_IS_EXAMPLE(example)); + /* If we are supposed to be doing something, here's where it happens. */ if (example->active) { - /* DO STUFF */ - } + /* In this example we're going to copy the buffer to another one, + * so we need to allocate a new buffer first. */ + outbuf = gst_buffer_new(); - gst_pad_push(example->srcpad,buf); + /* We need to copy the size and offset of the buffer at a minimum. */ + GST_BUFFER_SIZE (outbuf) = GST_BUFFER_SIZE (buf); + GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buf); + + /* Then allocate the memory for the new buffer */ + GST_BUFFER_DATA (outbuf) = (guchar *)g_malloc (GST_BUFFER_SIZE (outbuf)); + + /* Then copy the data in the incoming buffer into the new buffer. */ + memcpy (GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (outbuf)); + + /* When we're done with the buffer, we push it on to the next element + * in the pipeline, through the element's source pad, which is stored + * in the element's structure. + */ + gst_pad_push(example->srcpad,outbuf); + + /* For fun we'll emit our useless signal here */ + gtk_signal_emit (GTK_OBJECT (example), gst_example_signals[ASDF], + example); + + /* If we're not doing something, just send the original incoming buffer. */ + } else { + gst_pad_push(example->srcpad,buf); + } } +/* Arguments are part of the Gtk+ object system, and these functions + * enable the element to respond to various arguments. + */ static void gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id) { GstExample *example; - /* it's not null if we got it, but it might not be ours */ + /* It's not null if we got it, but it might not be ours */ g_return_if_fail(GST_IS_EXAMPLE(object)); + + /* Get a pointer of the right type. */ example = GST_EXAMPLE(object); - switch(id) { + /* Check the argument id to see which argument we're setting. */ + switch (id) { case ARG_ACTIVE: + /* Here we simply copy the value of the argument to our private + * storage. More complex operations can be done, but beware that + * they may occur at any time, possibly even while your chain function + * is running, if you are using threads. + */ example->active = GTK_VALUE_INT(*arg); g_print("example: set active to %d\n",example->active); break; @@ -171,12 +305,13 @@ gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id) } } +/* The set function is simply the inverse of the get fuction. */ static void gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id) { GstExample *example; - /* it's not null if we got it, but it might not be ours */ + /* It's not null if we got it, but it might not be ours */ g_return_if_fail(GST_IS_EXAMPLE(object)); example = GST_EXAMPLE(object); @@ -190,25 +325,45 @@ gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id) } } +/* This is the entry into the plugin itself. When the plugin loads, + * this function is called to register everything that the plugin provides. + */ GstPlugin* plugin_init (GModule *module) { GstPlugin *plugin; GstElementFactory *factory; + /* First we try to create a new Plugin structure. */ plugin = gst_plugin_new("example"); + /* If we get a NULL back, chances are we're already loaded. */ g_return_val_if_fail(plugin != NULL, NULL); + /* We need to create an ElementFactory for each element we provide. + * This consists of the name of the element, the GtkType identifier, + * and a pointer to the details structure at the top of the file. + */ factory = gst_elementfactory_new("example", GST_TYPE_EXAMPLE, &example_details); g_return_val_if_fail(factory != NULL, NULL); + /* The pad templates can be easily generated from the factories above, + * and then added to the list of padtemplates for the elementfactory. + * Note that the generated padtemplates are stored in static global + * variables, for the gst_example_init function to use later on. + */ sink_template = gst_padtemplate_new (&sink_factory); gst_elementfactory_add_padtemplate (factory, sink_template); src_template = gst_padtemplate_new (&src_factory); gst_elementfactory_add_padtemplate (factory, src_template); + /* The very last thing is to register the elementfactory with the plugin. */ gst_plugin_add_factory (plugin, factory); + /* Now we can return the pointer to the newly created Plugin object. */ return plugin; + + /* At this point, the GStreamer core registers the plugin, its + * elementfactories, padtemplates, etc., for use in you application. + */ } diff --git a/examples/plugins/example.h b/examples/plugins/example.h index d7f19a3f99..840b8a3d18 100644 --- a/examples/plugins/example.h +++ b/examples/plugins/example.h @@ -28,36 +28,61 @@ extern "C" { #endif /* __cplusplus */ -/* Definition of structure storing data for this element. */ +/* This is the definition of the element's object structure. */ typedef struct _GstExample GstExample; +/* The structure itself is derived from GstElement, as can be seen by the + * fact that there's a complete instance of the GstElement structure at + * the beginning of the object. This allows the element to be cast to + * an Element or even an Object. + */ struct _GstExample { GstElement element; + /* We need to keep track of our pads, so we do so here. */ GstPad *sinkpad,*srcpad; - gint8 active; + /* We'll use this to decide whether to do anything to the data we get. */ + gboolean active; }; -/* Standard definition defining a class for this element. */ +/* The other half of the object is its class. The class also derives from + * the same parent, though it must be the class structure this time. + * Function pointers for polymophic methods and signals are placed in this + * structure. */ typedef struct _GstExampleClass GstExampleClass; + struct _GstExampleClass { GstElementClass parent_class; + + /* signals */ + void (*asdf) (GstElement *element, GstExample *example); }; -/* Standard macros for defining types for this element. */ +/* Five standard preprocessing macros are used in the Gtk+ object system. + * The first uses the object's _get_type function to return the GtkType + * of the object. + */ #define GST_TYPE_EXAMPLE \ (gst_example_get_type()) +/* The second is a checking cast to the correct type. If the object passed + * is not the right type, a warning will be generated on stderr. + */ #define GST_EXAMPLE(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_EXAMPLE,GstExample)) +/* The third is a checking cast of the class instead of the object. */ #define GST_EXAMPLE_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample)) +/* The last two simply check to see if the passed pointer is an object or + * class of the correct type. */ #define GST_IS_EXAMPLE(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_EXAMPLE)) #define GST_IS_EXAMPLE_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_EXAMPLE)) -/* Standard function returning type information. */ +/* This is the only prototype needed, because it is used in the above + * GST_TYPE_EXAMPLE macro. + */ GtkType gst_example_get_type(void); diff --git a/gst/Makefile.am b/gst/Makefile.am index 5c6c686431..84be380e69 100644 --- a/gst/Makefile.am +++ b/gst/Makefile.am @@ -43,29 +43,48 @@ libgst_la_SOURCES = \ gstparse.c \ $(GSTARCH_SRCS) + +##### Oh this sucks so badly. This isn't funny. ##### + # the compiler shoots cothreads.c in the head at -O6 # FIXME: these manual rules break the dependency generation, so we have a # nasty hack here. -LTCOMPILE2=$(LTCOMPILE) -O2 -COMPILE2=$(COMPILE) -O2 -cothreads.lo: cothreads.c - @echo '$(LTCOMPILE2) -c $<'; \ - $(LTCOMPILE2) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp -cothreads.o: cothreads.c - @echo '$(COMPILE2) -c $<'; \ - $(COMPILE2) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp +#LTCOMPILE2=$(LTCOMPILE) -O2 +#COMPILE2=$(COMPILE) -O2 + +cothreads.lo: cothreads.c cothreads.h gst_private.h ../config.h gstinfo.c \ +gstarch.h gsti386.h + $(LIBTOOL) --mode=compile $(COMPILE) -O2 -c $< +cothreads.o: cothreads.c cothreads.h gst_private.h ../config.h gstinfo.c \ +gstarch.h gsti386.h + $(COMPILE) -O2 -c $< + +# NOTDEPEND.cothreads.lo: cothreads.c +# NOTDEPEND $(LTCOMPILE2) -c $< +# NOTDEPEND.cothreads.o: cothreads.c +# NOTDEPEND $(COMPILE2) -c $< + +#cothreads.lo: cothreads.c +# @echo '$(LTCOMPILE2) -c $<'; \ +# $(LTCOMPILE2) -Wp,-MD,.deps/$(*F).pp -c $< +# @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ +# < .deps/$(*F).pp > .deps/$(*F).P; \ +# tr ' ' '\012' < .deps/$(*F).pp \ +# | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ +# >> .deps/$(*F).P; \ +# rm -f .deps/$(*F).pp +#cothreads.o: cothreads.c +# @echo '$(COMPILE2) -c $<'; \ +# $(COMPILE2) -Wp,-MD,.deps/$(*F).pp -c $< +# @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ +# < .deps/$(*F).pp > .deps/$(*F).P; \ +# tr ' ' '\012' < .deps/$(*F).pp \ +# | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ +# >> .deps/$(*F).P; \ +# rm -f .deps/$(*F).pp + +##### end immense suckage ##### + libgstincludedir = $(includedir)/gst libgstinclude_HEADERS = \ diff --git a/gst/autoplug/gststaticautoplug.c b/gst/autoplug/gststaticautoplug.c index dc2e730faa..3eab16d77c 100644 --- a/gst/autoplug/gststaticautoplug.c +++ b/gst/autoplug/gststaticautoplug.c @@ -171,6 +171,33 @@ gst_autoplug_pads_autoplug_func (GstElement *src, GstPad *pad, GstElement *sink) return connected; } +typedef struct { + GstElement *result; + GList *endcap; + gint i; +} dynamic_pad_struct; + +static void +autoplug_dynamic_pad (GstElement *element, GstPad *pad, gpointer data) +{ + dynamic_pad_struct *info = (dynamic_pad_struct *)data; + GList *pads = gst_element_get_pad_list (element); + + GST_DEBUG (0,"attempting to dynamically create a ghostpad for %s=%s\n", GST_ELEMENT_NAME (element), + GST_PAD_NAME (pad)); + + while (pads) { + GstPad *pad = GST_PAD (pads->data); + pads = g_list_next (pads); + + if (gst_caps_list_check_compatibility (gst_pad_get_caps_list (pad), info->endcap)) { + gst_element_add_ghost_pad (info->result, pad, g_strdup_printf("src_%02d", info->i)); + GST_DEBUG (0,"gstpipeline: new dynamic pad %s\n", GST_PAD_NAME (pad)); + break; + } + } +} + static void gst_autoplug_pads_autoplug (GstElement *src, GstElement *sink) { @@ -455,17 +482,34 @@ differ: { GList *endcap = (GList *)(endcaps->data); GList *pads = gst_element_get_pad_list (thesrcelement); + gboolean have_pad = FALSE; endcaps = g_list_next (endcaps); + GST_DEBUG (0,"attempting to create a ghostpad for %s\n", GST_ELEMENT_NAME (thesrcelement)); + while (pads) { GstPad *pad = GST_PAD (pads->data); pads = g_list_next (pads); if (gst_caps_list_check_compatibility (gst_pad_get_caps_list (pad), endcap)) { gst_element_add_ghost_pad (result, pad, g_strdup_printf("src_%02d", i)); + have_pad = TRUE; break; } } + if (!have_pad) { + dynamic_pad_struct *data = g_new0(dynamic_pad_struct, 1); + + data->result = result; + data->endcap = endcap; + data->i = i; + + GST_DEBUG (0,"delaying the creation of a ghostpad for %s\n", GST_ELEMENT_NAME (thesrcelement)); + gtk_signal_connect (GTK_OBJECT (thesrcelement), "new_pad", + autoplug_dynamic_pad, data); + gtk_signal_connect (GTK_OBJECT (thesrcelement), "new_ghost_pad", + autoplug_dynamic_pad, data); + } } } diff --git a/gst/elements/gstdisksrc.c b/gst/elements/gstdisksrc.c index 1978a15b56..9e81eb9b73 100644 --- a/gst/elements/gstdisksrc.c +++ b/gst/elements/gstdisksrc.c @@ -32,7 +32,7 @@ GstElementDetails gst_disksrc_details = { - "asynchronous Disk Source", + "Disk Source", "Source/File", "Read from arbitrary point in a file", VERSION, diff --git a/gst/elements/gstelements.c b/gst/elements/gstelements.c index 1621fd20b4..62b5a9288f 100644 --- a/gst/elements/gstelements.c +++ b/gst/elements/gstelements.c @@ -48,18 +48,17 @@ struct _elements_entry { }; static struct _elements_entry _elements[] = { - { "fakesrc", gst_fakesrc_get_type, &gst_fakesrc_details, NULL }, - { "fakesink", gst_fakesink_get_type, &gst_fakesink_details, NULL }, - { "asyncdisksrc", gst_disksrc_get_type, &gst_disksrc_details, NULL }, - { "audiosink", gst_audiosink_get_type, &gst_audiosink_details, gst_audiosink_factory_init }, - { "audiosrc", gst_audiosrc_get_type, &gst_audiosrc_details, NULL }, - { "disksrc", gst_disksrc_get_type, &gst_disksrc_details, NULL }, - { "identity", gst_identity_get_type, &gst_identity_details, NULL }, - { "fdsink", gst_fdsink_get_type, &gst_fdsink_details, NULL }, - { "fdsrc", gst_fdsrc_get_type, &gst_fdsrc_details, NULL }, - { "pipefilter", gst_pipefilter_get_type, &gst_pipefilter_details, NULL }, - { "sinesrc", gst_sinesrc_get_type, &gst_sinesrc_details, NULL }, - { "tee", gst_tee_get_type, &gst_tee_details, gst_tee_factory_init }, + { "fakesrc", gst_fakesrc_get_type, &gst_fakesrc_details, NULL }, + { "fakesink", gst_fakesink_get_type, &gst_fakesink_details, NULL }, + { "audiosink", gst_audiosink_get_type, &gst_audiosink_details, gst_audiosink_factory_init }, + { "audiosrc", gst_audiosrc_get_type, &gst_audiosrc_details, NULL }, + { "disksrc", gst_disksrc_get_type, &gst_disksrc_details, NULL }, + { "identity", gst_identity_get_type, &gst_identity_details, NULL }, + { "fdsink", gst_fdsink_get_type, &gst_fdsink_details, NULL }, + { "fdsrc", gst_fdsrc_get_type, &gst_fdsrc_details, NULL }, + { "pipefilter", gst_pipefilter_get_type, &gst_pipefilter_details, NULL }, + { "sinesrc", gst_sinesrc_get_type, &gst_sinesrc_details, NULL }, + { "tee", gst_tee_get_type, &gst_tee_details, gst_tee_factory_init }, #if HAVE_LIBGHTTP { "httpsrc", gst_httpsrc_get_type, &gst_httpsrc_details, NULL }, diff --git a/gst/gst.c b/gst/gst.c index a8aa7958fd..d46aeba2b9 100644 --- a/gst/gst.c +++ b/gst/gst.c @@ -35,11 +35,13 @@ #include "gsttypefind.h" +#define MAX_PATH_SPLIT 16 gchar *_gst_progname; extern gint _gst_trace_on; +extern gboolean _gst_plugin_spew; static gboolean gst_init_check (int *argc, gchar ***argv); @@ -88,6 +90,31 @@ gst_init (int *argc, char **argv[]) } } +static void +gst_add_paths_func (gchar *pathlist) +{ + gchar **paths; + gint j = 0; + gchar *lastpath = g_strdup (pathlist); + + while (lastpath) { + paths = g_strsplit (lastpath, G_SEARCHPATH_SEPARATOR_S, MAX_PATH_SPLIT); + g_free (lastpath); + lastpath = NULL; + + while (paths[j]) { + GST_INFO (GST_CAT_GST_INIT, "Adding plugin path: \"%s\"", paths[j]); + gst_plugin_add_path (paths[j]); + if (++j == MAX_PATH_SPLIT) { + lastpath = g_strdup (paths[j]); + g_strfreev (paths); + j=0; + break; + } + } + } +} + /* returns FALSE if the program can be aborted */ static gboolean gst_init_check (int *argc, @@ -128,6 +155,16 @@ gst_init_check (int *argc, (*argv)[i] = NULL; } + else if (!strncmp ("--gst-plugin-spew", (*argv)[i], 17)) { + _gst_plugin_spew = TRUE; + + (*argv)[i] = NULL; + } + else if (!strncmp ("--gst-plugin-path=", (*argv)[i], 17)) { + gst_add_paths_func ((*argv)[i]+18); + + (*argv)[i] = NULL; + } else if (!strncmp ("--help", (*argv)[i], 6)) { showhelp = TRUE; } @@ -147,20 +184,33 @@ gst_init_check (int *argc, } } + + /* check for ENV variables */ + { + gchar *plugin_path = g_getenv("GST_PLUGIN_PATH"); + + gst_add_paths_func (plugin_path); + } + if (showhelp) { guint i; - g_print ("usage %s [OPTION...]\n", (*argv)[0]); + g_print ("usage %s [OPTION...]\n", _gst_progname); g_print ("\nGStreamer options\n"); - g_print (" --gst-info-mask=FLAGS Gst info flags to set (current %08x)\n", gst_info_get_categories()); - g_print (" --gst-debug-mask=FLAGS Gst debugging flags to set\n"); + g_print (" --gst-info-mask=FLAGS GST info flags to set (current %08x)\n", gst_info_get_categories()); + g_print (" --gst-debug-mask=FLAGS GST debugging flags to set\n"); + g_print (" --gst-plugin-spew Enable printout of errors while loading GST plugins\n"); + g_print (" --gst-plugin-path=PATH Add directories separated with '%s' to the plugin search path\n", + G_SEARCHPATH_SEPARATOR_S); - g_print ("\nGStreamer info/debug FLAGS (to be OR'ed)\n"); + g_print ("\n Mask (to be OR'ed) info/debug FLAGS \n"); + g_print ("--------------------------------------------------------\n"); for (i = 0; i +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + /* initialize GST */ void gst_init(int *argc,char **argv[]); void gst_main (void); void gst_main_quit (void); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #include #endif /* __GST_H__ */ diff --git a/gst/gstbin.c b/gst/gstbin.c index 4e70873d03..00e9acfe13 100644 --- a/gst/gstbin.c +++ b/gst/gstbin.c @@ -770,9 +770,9 @@ gst_bin_create_plan_func (GstBin *bin) gst_bin_schedule(bin); - g_print ("gstbin \"%s\", eos providers:%d\n", - GST_ELEMENT_NAME (bin), - bin->num_eos_providers); +// g_print ("gstbin \"%s\", eos providers:%d\n", +// GST_ELEMENT_NAME (bin), +// bin->num_eos_providers); GST_DEBUG_LEAVE("(\"%s\")",GST_ELEMENT_NAME (bin)); } @@ -805,11 +805,27 @@ gst_bin_iterate_func (GstBin *bin) if (!chain->need_scheduling) continue; if (chain->need_cothreads) { + GList *entries; + // all we really have to do is switch to the first child // FIXME this should be lots more intelligent about where to start GST_DEBUG (0,"starting iteration via cothreads\n"); - entry = GST_ELEMENT (chain->elements->data); + entries = chain->elements; + entry = NULL; + + // find an element with a threadstate to start with + while (entries) { + entry = GST_ELEMENT (entries->data); + + if (entry->threadstate) + break; + entries = g_list_next (entries); + } + // if we couldn't find one, bail out + if (entries == NULL) + GST_ERROR(GST_ELEMENT(bin),"no cothreaded elements found!"); + GST_FLAG_SET (entry, GST_ELEMENT_COTHREAD_STOPPING); GST_DEBUG (0,"set COTHREAD_STOPPING flag on \"%s\"(@%p)\n", GST_ELEMENT_NAME (entry),entry); diff --git a/gst/gstcaps.c b/gst/gstcaps.c index d9268e48d7..ebdaccc301 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -252,11 +252,11 @@ gst_caps_get_type_id (GstCaps *caps) * Set the type id of the caps. */ void -gst_caps_set_type_id (GstCaps *caps, guint16 typeid) +gst_caps_set_type_id (GstCaps *caps, guint16 type_id) { g_return_if_fail (caps != NULL); - caps->id = typeid; + caps->id = type_id; } /** diff --git a/gst/gstcaps.h b/gst/gstcaps.h index eebaab82d1..dffa1cd3d5 100644 --- a/gst/gstcaps.h +++ b/gst/gstcaps.h @@ -37,7 +37,11 @@ typedef struct _GstCaps GstCaps; typedef gpointer GstCapsFactoryEntry; +#ifdef __cplusplus +typedef GstCapsFactoryEntry * GstCapsFactory; +#else // C++ was unable to compile with this typedef GstCapsFactoryEntry GstCapsFactory[]; +#endif struct _GstCaps { gchar *name; /* the name of this caps */ @@ -62,7 +66,7 @@ const gchar* gst_caps_get_mime (GstCaps *caps); void gst_caps_set_mime (GstCaps *caps, const gchar *mime); guint16 gst_caps_get_type_id (GstCaps *caps); -void gst_caps_set_type_id (GstCaps *caps, guint16 typeid); +void gst_caps_set_type_id (GstCaps *caps, guint16 type_id); GstCaps* gst_caps_set_props (GstCaps *caps, GstProps *props); GstProps* gst_caps_get_props (GstCaps *caps); diff --git a/gst/gstcpu.c b/gst/gstcpu.c index 22a77d0897..d286bf7487 100644 --- a/gst/gstcpu.c +++ b/gst/gstcpu.c @@ -63,14 +63,23 @@ _gst_cpu_initialize (void) } if (edx & (1<<25)) { _gst_cpu_flags |= GST_CPU_FLAG_SSE; + _gst_cpu_flags |= GST_CPU_FLAG_MMXEXT; featurelist = stringcat(featurelist,"SSE "); } + if (edx & (1<<24)) { + _gst_cpu_flags |= GST_CPU_FLAG_MMXEXT; + featurelist = stringcat(featurelist,"MMXEXT "); + } + if (edx & (1<<31)) { + _gst_cpu_flags |= GST_CPU_FLAG_3DNOW; + featurelist = stringcat(featurelist,"3DNOW "); + } if (!_gst_cpu_flags) { featurelist = stringcat(featurelist,"NONE"); } - GST_INFO (GST_CAT_GST_INIT, "CPU features: %s",featurelist); + GST_INFO (GST_CAT_GST_INIT, "CPU features: (%08lx) %s",edx, featurelist); g_free(featurelist); } diff --git a/gst/gstcpu.h b/gst/gstcpu.h index f31e709256..e79b9c916a 100644 --- a/gst/gstcpu.h +++ b/gst/gstcpu.h @@ -27,6 +27,8 @@ typedef enum { GST_CPU_FLAG_MMX = (1<<0), GST_CPU_FLAG_SSE = (1<<1), + GST_CPU_FLAG_MMXEXT = (1<<2), + GST_CPU_FLAG_3DNOW = (1<<3), } GstCPUFlags; void _gst_cpu_initialize (void); diff --git a/gst/gstelement.h b/gst/gstelement.h index 398fb78391..655d18fafe 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -58,11 +58,11 @@ typedef enum { static inline char *_gst_print_statename(int state) { switch (state) { - case GST_STATE_NONE_PENDING: return "none pending";break; - case GST_STATE_NULL: return "null";break; - case GST_STATE_READY: return "ready";break; - case GST_STATE_PLAYING: return "playing";break; - case GST_STATE_PAUSED: return "paused";break; + case GST_STATE_NONE_PENDING: return "NONE_PENDING";break; + case GST_STATE_NULL: return "NULL";break; + case GST_STATE_READY: return "READY";break; + case GST_STATE_PLAYING: return "PLAYING";break; + case GST_STATE_PAUSED: return "PAUSED";break; default: return ""; } return ""; diff --git a/gst/gstinfo.h b/gst/gstinfo.h index cb11ca1ead..507b36b218 100644 --- a/gst/gstinfo.h +++ b/gst/gstinfo.h @@ -139,7 +139,7 @@ _gst_debug_register_funcptr (void *ptr, gchar *ptrname) static inline gchar * _gst_debug_nameof_funcptr (void *ptr) { - gchar *ptrname = __gst_function_pointers ? g_hash_table_lookup(__gst_function_pointers,ptr) : NULL; + gchar *ptrname = (gchar*)( __gst_function_pointers ? g_hash_table_lookup(__gst_function_pointers,ptr) : NULL ); // FIXME this must go away, it's a major leak if (!ptrname) return g_strdup_printf("%p",ptr); else return ptrname; diff --git a/gst/gstpad.c b/gst/gstpad.c index 74568b89bf..b28bdcfdbd 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -819,7 +819,7 @@ void gst_pad_load_and_connect (xmlNodePtr self, GstObject *parent) { - xmlNodePtr field = self->childs; + xmlNodePtr field = self->xmlChildrenNode; GstPad *pad = NULL, *targetpad; guchar *peer = NULL; gchar **split; @@ -927,22 +927,49 @@ gst_pad_ghost_save_thyself (GstPad *pad, } #ifndef gst_pad_push -void gst_pad_push(GstPad *pad,GstBuffer *buf) { - GstRealPad *peer = GST_RPAD_PEER(pad); - GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); +/** + * gst_pad_push: + * @pad: the pad to push + * @buf: the buffer to push + * + * Push a buffer to the peer of the pad. + */ +void +gst_pad_push (GstPad *pad, GstBuffer *buf) +{ + GstRealPad *peer = GST_RPAD_PEER (pad); + + g_return_if_fail (peer != NULL); + + GST_DEBUG_ENTER ("(%s:%s)", GST_DEBUG_PAD_NAME (pad)); + if (peer->pushfunc) { - GST_DEBUG (0,"calling pushfunc &%s of peer pad %s:%s\n", - GST_DEBUG_FUNCPTR_NAME(peer->pushfunc),GST_DEBUG_PAD_NAME(((GstPad*)peer))); - (peer->pushfunc)(((GstPad*)peer),buf); + GST_DEBUG (0, "calling pushfunc &%s of peer pad %s:%s\n", + GST_DEBUG_FUNCPTR_NAME (peer->pushfunc), GST_DEBUG_PAD_NAME (((GstPad*)peer))); + (peer->pushfunc) (((GstPad*)peer), buf); } else - GST_DEBUG (0,"no pushfunc\n"); + GST_DEBUG (0, "no pushfunc\n"); } #endif #ifndef gst_pad_pull -GstBuffer *gst_pad_pull(GstPad *pad) { +/** + * gst_pad_pull: + * @pad: the pad to pull + * + * Pull a buffer from the peer pad. + * + * Returns: a new buffer from the peer pad. + */ +GstBuffer* +gst_pad_pull (GstPad *pad) +{ GstRealPad *peer = GST_RPAD_PEER(pad); + + g_return_val_if_fail (peer != NULL, NULL); + GST_DEBUG_ENTER("(%s:%s)",GST_DEBUG_PAD_NAME(pad)); + if (peer->pullfunc) { GST_DEBUG (0,"calling pullfunc &%s (@%p) of peer pad %s:%s\n", GST_DEBUG_FUNCPTR_NAME(peer->pullfunc),&peer->pullfunc,GST_DEBUG_PAD_NAME(((GstPad*)peer))); @@ -955,9 +982,29 @@ GstBuffer *gst_pad_pull(GstPad *pad) { #endif #ifndef gst_pad_pullregion -GstBuffer *gst_pad_pullregion(GstPad *pad,GstRegionType type,guint64 offset,guint64 len) { +/** + * gst_pad_pullregion: + * @pad: the pad to pull the region from + * @type: the regiontype + * @offset: the offset/start of the buffer to pull + * @len: the length of the buffer to pull + * + * Pull a buffer region from the peer pad. The region to pull can be + * specified with a offset/lenght pair or with a start/legnth time + * indicator as specified by the type parameter. + * + * Returns: a new buffer from the peer pad with data in the specified + * region. + */ +GstBuffer* +gst_pad_pullregion (GstPad *pad, GstRegionType type, guint64 offset, guint64 len) +{ GstRealPad *peer = GST_RPAD_PEER(pad); + + g_return_val_if_fail (peer != NULL, NULL); + GST_DEBUG_ENTER("(%s:%s,%d,%lld,%lld)",GST_DEBUG_PAD_NAME(pad),type,offset,len); + if (peer->pullregionfunc) { GST_DEBUG (0,"calling pullregionfunc &%s of peer pad %s:%s\n", GST_DEBUG_FUNCPTR_NAME(peer->pullregionfunc),GST_DEBUG_PAD_NAME(((GstPad*)peer))); @@ -1278,23 +1325,6 @@ gst_pad_set_eos(GstPad *pad) return TRUE; } -/* -GstPad * -gst_pad_select(GstPad *nextpad, ...) { - va_list args; - GstPad *pad; - GSList *pads = NULL; - - // construct the list of pads - va_start (args, nextpad); - while ((pad = va_arg (args, GstPad*))) - pads = g_slist_prepend (pads, pad); - va_end (args); - - // now switch to the nextpad -*/ - - /** * gst_pad_set_element_private: * @pad: the pad to set the private data to diff --git a/gst/gstpad.h b/gst/gstpad.h index 9d0e9012e6..ef21617fdd 100644 --- a/gst/gstpad.h +++ b/gst/gstpad.h @@ -26,6 +26,13 @@ #include // NOTE: This is xml-config's fault +// Include compatability defines: if libxml hasn't already defined these, +// we have an old version 1.x +#ifndef xmlChildrenNode +#define xmlChildrenNode childs +#define xmlRootNode root +#endif + #include #include #include @@ -283,7 +290,7 @@ void gst_pad_connect (GstPad *srcpad, GstPad *sinkpad); void gst_pad_disconnect (GstPad *srcpad, GstPad *sinkpad); #if 1 -void gst_pad_push (GstPad *pad, GstBuffer *buffer); +void gst_pad_push (GstPad *pad, GstBuffer *buf); #else #define gst_pad_push(pad,buf) G_STMT_START{ \ if ((pad)->peer->pushfunc) ((pad)->peer->pushfunc)((pad)->peer,(buf)); \ @@ -299,8 +306,6 @@ GstBuffer* gst_pad_pullregion (GstPad *pad, GstRegionType type, guint64 offset (((pad)->peer->pullregionfunc) ? ((pad)->peer->pullregionfunc)((pad)->peer,(type),(offset),(len)) : NULL) #endif -GstPad * gst_pad_select (GstPad *nextpad, ...); - #define gst_pad_eos(pad) (GST_RPAD_EOSFUNC(GST_RPAD_PEER(pad))(GST_PAD(GST_RPAD_PEER(pad)))) gboolean gst_pad_set_eos (GstPad *pad); diff --git a/gst/gstplugin.c b/gst/gstplugin.c index 9012bec2f6..f372fb920a 100644 --- a/gst/gstplugin.c +++ b/gst/gstplugin.c @@ -66,6 +66,8 @@ _gst_plugin_initialize (void) _gst_libraries = NULL; _gst_libraries_seqno = 0; + /* add the main (installed) library path */ + _gst_plugin_paths = g_list_prepend (_gst_plugin_paths, PLUGINS_DIR); /* if this is set, we add build-directory paths to the list */ #ifdef PLUGINS_USE_SRCDIR @@ -82,9 +84,6 @@ _gst_plugin_initialize (void) PLUGINS_SRCDIR "/gst/types"); _gst_plugin_paths = g_list_prepend (_gst_plugin_paths, PLUGINS_SRCDIR "/gst/autoplug"); -#else /* PLUGINS_USE_SRCDIR */ - /* add the main (installed) library path */ - _gst_plugin_paths = g_list_prepend (_gst_plugin_paths, PLUGINS_DIR); #endif /* PLUGINS_USE_SRCDIR */ doc = xmlParseFile (GST_CONFIG_DIR"/reg.xml"); @@ -101,6 +100,18 @@ _gst_plugin_initialize (void) xmlFreeDoc (doc); } +/** + * gst_plugin_add_path: + * @path: the directory to add to the search path + * + * Add a directory to the path searched for plugins. + */ +void +gst_plugin_add_path (const gchar *path) +{ + _gst_plugin_paths = g_list_prepend (_gst_plugin_paths,g_strdup(path)); +} + static time_t get_time(const char * path) { @@ -216,7 +227,7 @@ gst_plugin_load_all(void) path = _gst_plugin_paths; while (path != NULL) { - GST_DEBUG (GST_CAT_PLUGIN_LOADING,"loading plugins from %s\n",(gchar *)path->data); + GST_INFO (GST_CAT_PLUGIN_LOADING,"loading plugins from %s\n",(gchar *)path->data); gst_plugin_load_recurse(path->data,NULL); path = g_list_next(path); } @@ -366,7 +377,8 @@ gst_plugin_load_absolute (const gchar *name) } return TRUE; } else if (_gst_plugin_spew) { - gst_info("error loading plugin: %s, reason: %s\n", name, g_module_error()); + // FIXME this should be some standard gst mechanism!!! + g_printerr ("error loading plugin %s, reason: %s\n", name, g_module_error()); } return FALSE; diff --git a/gst/gstplugin.h b/gst/gstplugin.h index 545ce05fce..94e7824974 100644 --- a/gst/gstplugin.h +++ b/gst/gstplugin.h @@ -64,6 +64,8 @@ void _gst_plugin_initialize (void); GstPlugin* gst_plugin_new (const gchar *name); +void gst_plugin_add_path (const gchar *path); + const gchar* gst_plugin_get_name (GstPlugin *plugin); void gst_plugin_set_name (GstPlugin *plugin, const gchar *name); const gchar* gst_plugin_get_longname (GstPlugin *plugin); diff --git a/gst/gstprops.c b/gst/gstprops.c index b5b11386ab..d3ca3cf8b0 100644 --- a/gst/gstprops.c +++ b/gst/gstprops.c @@ -54,23 +54,23 @@ gst_props_create_entry (GstPropsFactory factory, gint *skipped) tag = factory[i++]; switch (GPOINTER_TO_INT (tag)) { - case GST_PROPS_INT_ID: + case GST_PROPS_INT_ID_NUM: entry->propstype = GST_PROPS_INT_ID_NUM; entry->data.int_data = GPOINTER_TO_INT (factory[i++]); break; - case GST_PROPS_INT_RANGE_ID: + case GST_PROPS_INT_RANGE_ID_NUM: entry->propstype = GST_PROPS_INT_RANGE_ID_NUM; entry->data.int_range_data.min = GPOINTER_TO_INT (factory[i++]); entry->data.int_range_data.max = GPOINTER_TO_INT (factory[i++]); break; - case GST_PROPS_FOURCC_ID: + case GST_PROPS_FOURCC_ID_NUM: entry->propstype = GST_PROPS_FOURCC_ID_NUM; entry->data.fourcc_data = GPOINTER_TO_INT (factory[i++]); break; - case GST_PROPS_LIST_ID: + case GST_PROPS_LIST_ID_NUM: g_print("gstprops: list not allowed in list\n"); break; - case GST_PROPS_BOOL_ID: + case GST_PROPS_BOOL_ID_NUM: entry->propstype = GST_PROPS_BOOL_ID_NUM; entry->data.bool_data = GPOINTER_TO_INT (factory[i++]); break; @@ -154,7 +154,7 @@ gst_props_register_count (GstPropsFactory factory, guint *counter) tag = factory[i]; switch (GPOINTER_TO_INT (tag)) { - case GST_PROPS_LIST_ID: + case GST_PROPS_LIST_ID_NUM: { GstPropsEntry *list_entry; @@ -241,13 +241,13 @@ gst_props_new (GstPropsFactoryEntry entry, ...) value = va_arg (var_args, GstPropsFactoryEntry); } switch (GPOINTER_TO_INT (value)) { - case GST_PROPS_END_ID: + case GST_PROPS_END_ID_NUM: g_assert (inlist == TRUE); inlist = FALSE; skip = 0; break; - case GST_PROPS_LIST_ID: + case GST_PROPS_LIST_ID_NUM: { g_assert (inlist == FALSE); diff --git a/gst/gstqueue.c b/gst/gstqueue.c index ba91043b08..a500f9189a 100644 --- a/gst/gstqueue.c +++ b/gst/gstqueue.c @@ -251,11 +251,15 @@ gst_queue_chain (GstPad *pad, GstBuffer *buf) static GstBuffer * gst_queue_get (GstPad *pad) { - GstQueue *queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); + GstQueue *queue; GstBuffer *buf = NULL; GSList *front; const guchar *name; + g_return_val_if_fail (pad != NULL, NULL); + g_return_val_if_fail (GST_IS_PAD (pad), NULL); + + queue = GST_QUEUE (GST_OBJECT_PARENT (pad)); name = GST_ELEMENT_NAME (queue); /* have to lock for thread-safety */ diff --git a/gst/gstscheduler.c b/gst/gstscheduler.c index b2230b2fa5..cc6fe46d0e 100644 --- a/gst/gstscheduler.c +++ b/gst/gstscheduler.c @@ -105,6 +105,7 @@ gst_bin_src_wrapper (int argc,char *argv[]) // fprintf(stderr,"error, no getregionfunc in \"%s\"\n", name); // else buf = (GST_RPAD_GETREGIONFUNC(realpad))((GstPad*)realpad,realpad->regiontype,realpad->offset,realpad->len); + realpad->regiontype = GST_REGION_NONE; } else { g_return_val_if_fail (GST_RPAD_GETFUNC(realpad) != NULL, 0); // if (GST_RPAD_GETFUNC(realpad) == NULL) diff --git a/gst/gstthread.c b/gst/gstthread.c index 04e695c603..ca269b0032 100644 --- a/gst/gstthread.c +++ b/gst/gstthread.c @@ -282,6 +282,7 @@ gst_thread_change_state (GstElement *element) GST_FLAG_SET (thread, GST_THREAD_STATE_REAPING); gst_thread_signal_thread (thread); + pthread_join(thread->thread_id,NULL); break; default: break; @@ -324,7 +325,8 @@ gst_thread_main_loop (void *arg) } GST_FLAG_UNSET (thread, GST_THREAD_STATE_REAPING); - //pthread_join (thread->thread_id, 0); +// FIXME this should be removed (why's it here???) +// //pthread_join (thread->thread_id, 0); GST_INFO (GST_CAT_THREAD, "gstthread: thread \"%s\" is stopped", GST_ELEMENT_NAME (thread)); diff --git a/gst/gsttype.c b/gst/gsttype.c index 7b7b34efd3..437da194df 100644 --- a/gst/gsttype.c +++ b/gst/gsttype.c @@ -80,6 +80,7 @@ gst_type_register (GstTypeFactory *factory) _gst_types = g_list_prepend (_gst_types, type); id = type->id; + GST_DEBUG (0,"gsttype: new mime type '%s', id %d\n", type->mime, type->id); } else { type = gst_type_find_by_id (id); diff --git a/gst/gstutils.h b/gst/gstutils.h index a6465fee08..3f15ed2c9d 100644 --- a/gst/gstutils.h +++ b/gst/gstutils.h @@ -26,6 +26,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + gint gst_util_get_int_arg (GtkObject *object, guchar *argname); gboolean gst_util_get_bool_arg (GtkObject *object, guchar *argname); glong gst_util_get_long_arg (GtkObject *object, guchar *argname); @@ -37,4 +41,8 @@ GtkWidget* gst_util_get_widget_arg (GtkObject *object, guchar *argname); void gst_util_dump_mem (guchar *mem, guint size); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + #endif /* __GST_UTILS_H__ */ diff --git a/gstplay/gstmediaplay.c b/gstplay/gstmediaplay.c index 49276c6af1..24be408f5e 100644 --- a/gstplay/gstmediaplay.c +++ b/gstplay/gstmediaplay.c @@ -412,6 +412,8 @@ gst_media_play_frame_displayed (GstPlay *play, size = gst_play_get_media_size (play); current_offset = gst_play_get_media_offset (play); + //g_print ("%lu %lu %lu %lu\n", current_time, total_time, size, current_offset); + if (current_time != mplay->last_time) { gdk_threads_enter (); gst_media_play_update_status_area (mplay, current_time, total_time); diff --git a/gstplay/gstplay.c b/gstplay/gstplay.c index 660c02e8d6..3ce0457c79 100644 --- a/gstplay/gstplay.c +++ b/gstplay/gstplay.c @@ -316,18 +316,20 @@ gst_play_typefind (GstBin *bin, GstElement *element) } static gboolean -connect_pads (GstElement *new_element, GstElement *target) +connect_pads (GstElement *new_element, GstElement *target, gboolean add) { GList *pads = gst_element_get_pad_list (new_element); + GstPad *targetpad = gst_element_get_pad (target, "sink"); while (pads) { GstPad *pad = GST_PAD (pads->data); - GstPad *targetpad = gst_element_get_pad (target, "sink"); if (gst_pad_check_compatibility (pad, targetpad)) { - gst_bin_add (GST_BIN (gst_element_get_parent ( - GST_ELEMENT (gst_pad_get_real_parent (pad)))), - target); + if (add) { + gst_bin_add (GST_BIN (gst_element_get_parent ( + GST_ELEMENT (gst_pad_get_real_parent (pad)))), + target); + } gst_pad_connect (pad, targetpad); return TRUE; } @@ -336,6 +338,27 @@ connect_pads (GstElement *new_element, GstElement *target) return FALSE; } +static void +dynamic_connect_pads (GstElement *new_element, GstPad *pad, gpointer data) +{ + GstPlay *play = (GstPlay *)data; + GstPlayPrivate *priv; + + priv = (GstPlayPrivate *)play->priv; + + gdk_threads_enter(); + if (!(play->flags & GST_PLAY_TYPE_AUDIO) && + (connect_pads (new_element, priv->audio_queue, FALSE))) { + play->flags |= GST_PLAY_TYPE_AUDIO; + } + if (!(play->flags & GST_PLAY_TYPE_VIDEO) && + (connect_pads (new_element, priv->video_queue, FALSE))) { + play->flags |= GST_PLAY_TYPE_VIDEO; + gtk_widget_show (priv->video_widget); + } + gdk_threads_leave(); +} + GstPlayReturn gst_play_set_uri (GstPlay *play, const guchar *uri) @@ -392,15 +415,25 @@ gst_play_set_uri (GstPlay *play, gst_element_connect (priv->src, "src", new_element, "sink"); - if (connect_pads (new_element, priv->video_queue)) { + if (connect_pads (new_element, priv->video_queue, TRUE)) { gst_bin_add (GST_BIN (priv->bin), priv->video_show), play->flags |= GST_PLAY_TYPE_VIDEO; gtk_widget_show (priv->video_widget); } - if (connect_pads (new_element, priv->audio_queue)) { + else { + gst_bin_add (GST_BIN (priv->bin), priv->video_show), + gtk_signal_connect (GTK_OBJECT (new_element), "new_pad", dynamic_connect_pads, play); + gtk_signal_connect (GTK_OBJECT (new_element), "new_ghost_pad", dynamic_connect_pads, play); + } + if (connect_pads (new_element, priv->audio_queue, TRUE)) { gst_bin_add (GST_BIN (priv->bin), priv->audio_play), play->flags |= GST_PLAY_TYPE_AUDIO; } + else { + gst_bin_add (GST_BIN (priv->bin), priv->audio_play), + gtk_signal_connect (GTK_OBJECT (new_element), "new_pad", dynamic_connect_pads, play); + gtk_signal_connect (GTK_OBJECT (new_element), "new_ghost_pad", dynamic_connect_pads, play); + } gst_bin_add (GST_BIN (priv->thread), priv->bin); gtk_signal_connect (GTK_OBJECT (priv->thread), "eos", GTK_SIGNAL_FUNC (gst_play_eos), play); diff --git a/gstreamer-config.in b/gstreamer-config.in index 6811a7feee..8cd2df8e76 100644 --- a/gstreamer-config.in +++ b/gstreamer-config.in @@ -47,14 +47,14 @@ while test $# -gt 0; do elif test @includedir@ != /usr/include ; then includes=-I@includedir@ fi - echo $includes `gtk-config --cflags gtk gthread` + echo $includes @CORE_CFLAGS@ ;; --libs) if test $prefix -ef @builddir@ ; then - echo @builddir@/libgst.la `gtk-config --libs gtk gthread` + echo @builddir@/libgst.la @CORE_LIBS@ else libdirs=-L@libdir@ - echo $libdirs -lgst `gtk-config --libs gtk gthread` + echo $libdirs -lgst @CORE_LIBS@ fi ;; *) diff --git a/include/Makefile.am b/include/Makefile.am index 0039492811..6414a20d39 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,8 +1,5 @@ SUBDIRS = wine noinst_HEADERS = \ - avifmt.h \ - default.h \ mmx.h \ - registry.h \ sse.h diff --git a/include/default.h b/include/default.h deleted file mode 100644 index b12e9c1fb0..0000000000 --- a/include/default.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _DEFAULT_H -#define _DEFAULT_H - -typedef long HRESULT; -typedef unsigned int offset_t; -#define E_NOTIMPL -158 -#define E_FAIL -1 -#define E_ERROR -2 - -#define fccDIV3 mmioFOURCC('D', 'I', 'V', '3') -#define fccDIV4 mmioFOURCC('D', 'I', 'V', '4') -#define fccIV50 mmioFOURCC('I', 'V', '5', '0') - -#endif - diff --git a/include/wine/msacm.h b/include/wine/msacm.h index 18f1d855c7..b76c1095a8 100644 --- a/include/wine/msacm.h +++ b/include/wine/msacm.h @@ -13,7 +13,7 @@ extern "C" { #endif /* defined(__cplusplus) */ -typedef WORD VERSION; /* major (high byte), minor (low byte) */ +//typedef WORD VERSION; /* major (high byte), minor (low byte) */ typedef UINT16 MMVERSION16; typedef UINT MMVERSION; diff --git a/libs/Makefile.am b/libs/Makefile.am index b77eea6fc8..7b895f0bc5 100644 --- a/libs/Makefile.am +++ b/libs/Makefile.am @@ -1,9 +1,9 @@ if HAVE_CPU_I386 -GSTARCH_SUBDS = videoscale winloader +GSTARCH_SUBDS = winloader else GSTARCH_SUBDS = endif -SUBDIRS = riff colorspace getbits putbits idct $(GSTARCH_SUBDS) +SUBDIRS = riff colorspace getbits putbits idct videoscale $(GSTARCH_SUBDS) DIST_SUBDIRS = riff colorspace getbits putbits videoscale winloader idct diff --git a/libs/colorspace/rgb2rgb.c b/libs/colorspace/rgb2rgb.c index 43f06ce943..d5e788f090 100644 --- a/libs/colorspace/rgb2rgb.c +++ b/libs/colorspace/rgb2rgb.c @@ -26,6 +26,7 @@ static void gst_colorspace_rgb_to_rgb_identity(GstColorSpaceConverter *space, un static void gst_colorspace_rgb24_to_bgr24(GstColorSpaceConverter *space, unsigned char *src, unsigned char *dest); static void gst_colorspace_rgb32_to_bgr32(GstColorSpaceConverter *space, unsigned char *src, unsigned char *dest); static void gst_colorspace_rgb555_to_rgb565(GstColorSpaceConverter *space, unsigned char *src, unsigned char *dest); +static void gst_colorspace_bgr565_to_rgb32(GstColorSpaceConverter *space, unsigned char *src, unsigned char *dest); GstColorSpaceConvertFunction gst_colorspace_rgb2rgb_get_converter(GstColorSpaceConverter *space, GstColorSpaceType src, GstColorSpaceType dest) { switch(src) { @@ -93,6 +94,17 @@ GstColorSpaceConvertFunction gst_colorspace_rgb2rgb_get_converter(GstColorSpaceC default: break; } + break; + case GST_COLORSPACE_BGR565: + space->insize = space->width*space->height*2; + switch(dest) { + case GST_COLORSPACE_RGB32 : + space->outsize = space->width*space->height*4; + return gst_colorspace_bgr565_to_rgb32; + default: + break; + }; + break; default: break; } @@ -183,3 +195,27 @@ static void gst_colorspace_rgb555_to_rgb565(GstColorSpaceConverter *space, unsig } } } + +static void gst_colorspace_bgr565_to_rgb32(GstColorSpaceConverter *space, unsigned char *src, unsigned char *dest) +{ + gint size; + guint16 *srcptr = (guint16 *)src; + guint32 *destptr = (guint32 *)dest; + size = space->outsize >> 2; + + g_assert (src != dest); /* todo */ + while (size--) { + /* in detail I do this + red=(unsigned char)(*srcptr)&0x1f; + green=(unsigned char)(((*srcptr)&0x07E0)>>5); + blue=(unsigned char)(((*srcptr)&0xf800)>>11); + *destptr++ = (((guint32)blue) << 3) + | (((guint32)green) << (8+2)) + | (((guint32)red) << (16+3)); + */ + *destptr++ = (((*srcptr)&0xf800)>>8)|(((*srcptr)&0x07E0)<<5)|(((*srcptr)&0x1f)<<19); + srcptr++; + } +} + + diff --git a/libs/getbits/gstgetbits.c b/libs/getbits/gstgetbits.c index 5ebb042621..1a04acb52b 100644 --- a/libs/getbits/gstgetbits.c +++ b/libs/getbits/gstgetbits.c @@ -166,7 +166,7 @@ void gst_getbits_init(gst_getbits_t *gb, GstGetbitsCallback callback, void *data gb->getbits = _gst_getbits_mmx; // gb->backbits = _gst_getbits_back_mmx; // gb->backbytes = _gst_getbits_byteback_mmx; - printf("gstgetbits: using MMX optimized versions\n"); +// printf("gstgetbits: using MMX optimized versions\n"); } else #endif /* HAVE_LIBMMX */ { @@ -175,7 +175,7 @@ void gst_getbits_init(gst_getbits_t *gb, GstGetbitsCallback callback, void *data gb->showbits = _gst_showbits_int; gb->flushbits = _gst_flushbits_int; gb->backbits = _gst_getbits_back_int; - printf("gstgetbits: using callback versions\n"); +// printf("gstgetbits: using callback versions\n"); } else { #ifdef HAVE_CPU_I386 @@ -187,7 +187,7 @@ void gst_getbits_init(gst_getbits_t *gb, GstGetbitsCallback callback, void *data gb->showbits = _gst_showbits_i386; gb->flushbits = _gst_flushbits_i386; gb->backbits = _gst_getbits_back_i386; - printf("gstgetbits: using i386 optimized versions\n"); +// printf("gstgetbits: using i386 optimized versions\n"); #else gb->get1bit = _gst_get1bit_int; gb->getbits = _gst_getbits_int; @@ -197,7 +197,7 @@ void gst_getbits_init(gst_getbits_t *gb, GstGetbitsCallback callback, void *data gb->showbits = _gst_showbits_int; gb->flushbits = _gst_flushbits_int; gb->backbits = _gst_getbits_back_int; - printf("gstgetbits: using normal versions\n"); +// printf("gstgetbits: using normal versions\n"); #endif } } diff --git a/libs/getbits/gstgetbits.h b/libs/getbits/gstgetbits.h index 7e56796c39..79b29f3de0 100644 --- a/libs/getbits/gstgetbits.h +++ b/libs/getbits/gstgetbits.h @@ -17,22 +17,7 @@ #include #endif /* HAVE_LIBSSE */ -#ifdef WORDS_BIGENDIAN -# define swab32(x) (x) -#else -# if defined (__i386__) -# define swab32(x) __i386_swab32(x) - static inline const unsigned long __i386_swab32(unsigned long x) - { - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; - } -# else -# define swab32(x)\ - ((((guint8*)&x)[0] << 24) | (((guint8*)&x)[1] << 16) | \ - (((guint8*)&x)[2] << 8) | (((guint8*)&x)[3])) -# endif -#endif +#define swab32(x) GUINT32_FROM_BE(x) typedef struct _gst_getbits_t gst_getbits_t; typedef void (*GstGetbitsCallback) (gst_getbits_t *gb, void *data); diff --git a/libs/getbits/gstgetbits_inl.h b/libs/getbits/gstgetbits_inl.h index 2e025c7aaa..0fcbc3b590 100644 --- a/libs/getbits/gstgetbits_inl.h +++ b/libs/getbits/gstgetbits_inl.h @@ -73,22 +73,7 @@ #define checklength2(src, dst) #endif -#ifdef WORDS_BIGENDIAN -# define swab32(x) (x) -#else -# if defined (__i386__) -# define swab32(x) __i386_swab32(x) - static inline const guint32 __i386_swab32(guint32 x) - { - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; - } -# else -# define swab32(x)\ - ((((guint8*)&x)[0] << 24) | (((guint8*)&x)[1] << 16) | \ - (((guint8*)&x)[2] << 8) | (((guint8*)&x)[3])) -# endif -#endif +#define swab32(x) GUINT32_FROM_BE(x) /* External declarations for bitstream i/o operations. */ extern unsigned long gst_getbits_nBitMask[]; diff --git a/libs/videoscale/Makefile.am b/libs/videoscale/Makefile.am index 64adf794e8..640722ba31 100644 --- a/libs/videoscale/Makefile.am +++ b/libs/videoscale/Makefile.am @@ -16,4 +16,4 @@ libgstvideoscaleinclude_HEADERS = gstvideoscale.h noinst_HEADERS = gstscale_x86.h #CFLAGS += -S -O1 $(FOMIT_FRAME_POINTER) -funroll-all-loops -finline-functions -ffast-math -CFLAGS = $(GLIB_CFLAGS) $(LIBGST_CFLAGS) $(XML_CFLAGS) -O5 -fomit-frame-pointer -ffast-math +CFLAGS = $(GLIB_CFLAGS) $(GTK_CFLAGS) $(GST_CFLAGS) $(XML_CFLAGS) -O5 -fomit-frame-pointer -ffast-math diff --git a/libs/winloader/Makefile.am b/libs/winloader/Makefile.am index 75d0f2b16f..ececec29c8 100644 --- a/libs/winloader/Makefile.am +++ b/libs/winloader/Makefile.am @@ -3,12 +3,12 @@ filterdir = $(libdir)/gst filter_LTLIBRARIES = libwinloader.la # compiler manages to screw something up here... must reduce optimizations -CFLAGS += -O2 +CFLAGS += -O0 -funroll-loops -libwinloader_la_SOURCES = driver.c elfdll.c ext.c externals.c module.c \ +libwinloader_la_SOURCES = win32.c driver.c elfdll.c ext.c module.c \ pe_image.c pe_resource.c registry.c resource.c stubs.s vfl.c afl.c -noinst_HEADERS = externals.h wineacm.h +noinst_HEADERS = wineacm.h win32.h registry.h avifmt.h DEFINES=-rdynamic -fPIC -D__WINE__ -Ddbg_printf=__vprintf -DTRACE=__vprintf CFLAGS += $(DEFINES) diff --git a/libs/winloader/afl.c b/libs/winloader/afl.c index 72546f3b49..df4187f6d8 100644 --- a/libs/winloader/afl.c +++ b/libs/winloader/afl.c @@ -304,6 +304,7 @@ void MSACM_RegisterAllDrivers(void) MSACM_RegisterDriver("divxa32", (LPSTR)0x161, 0); MSACM_RegisterDriver("msadp32", (LPSTR)0x2, 0); + MSACM_RegisterDriver("l3codeca", (LPSTR)0x55, 0); } /*********************************************************************** diff --git a/include/avifmt.h b/libs/winloader/avifmt.h similarity index 100% rename from include/avifmt.h rename to libs/winloader/avifmt.h diff --git a/libs/winloader/driver.c b/libs/winloader/driver.c index 8fdb435e42..3dfd0ffa8e 100644 --- a/libs/winloader/driver.c +++ b/libs/winloader/driver.c @@ -6,7 +6,7 @@ #include #include -#include +#include "config.h" #define STORE_ALL \ __asm__ ( \ @@ -25,6 +25,7 @@ "pop %%ebx\n\t"::) +#define WIN32_PATH GST_WIN32_LIBDIR typedef struct { UINT uDriverSignature; @@ -86,18 +87,21 @@ typedef struct int usage; }codec_t; -//#define Win32Path "/usr/lib/win32/" -#define Win32Path GST_WIN32_LIBDIR static codec_t avi_codecs[]={ - {0, Win32Path"/divxc32.dll", 0}, //0 - {0, Win32Path"/ir50_32.dll", 0}, - {0, Win32Path"/ir41_32.dll", 0}, - {0, Win32Path"/ir32_32.dll", 0}, - {0, Win32Path"/mpg4c32.dll", 0}, - {0, Win32Path"/iccvid.dll", 0}, //5 - {0, Win32Path"/libvideodll.so", 0}, - {0, Win32Path"/divxa32.acm", 0}, //7 - {0, Win32Path"/msadp32.acm", 0}, + {0, WIN32_PATH"/divxc32.dll", 0}, //0 + {0, WIN32_PATH"/ir50_32.dll", 0}, + {0, WIN32_PATH"/ir41_32.dll", 0}, + {0, WIN32_PATH"/ir32_32.dll", 0}, + {0, WIN32_PATH"/mpg4c32.dll", 0}, + {0, WIN32_PATH"/iccvid.dll", 0}, //5 + {0, WIN32_PATH"/libvideodll.so", 0}, + {0, WIN32_PATH"/divxa32.acm", 0}, + {0, WIN32_PATH"/msadp32.acm", 0}, + {0, WIN32_PATH"/ativcr1.dll", 0}, + {0, WIN32_PATH"/ativcr2.dll", 0}, //10 + {0, WIN32_PATH"/i263_32.drv", 0}, + {0, WIN32_PATH"/l3codeca.acm", 0}, +// {0, WIN32_PATH"/atiyvu9.dll", 0}, }; @@ -155,6 +159,9 @@ DrvOpen(LPARAM lParam2) case mmioFOURCC('D', 'I', 'V', '4'): case mmioFOURCC('d', 'i', 'v', '3'): case mmioFOURCC('d', 'i', 'v', '4'): + case mmioFOURCC('M', 'P', '4', '1'): + case mmioFOURCC('M', 'P', '4', '2'): + case mmioFOURCC('M', 'P', '4', '3'): printf("Video in DivX ;-) format\n"); drv_id=0; break; @@ -178,9 +185,6 @@ DrvOpen(LPARAM lParam2) case mmioFOURCC('m', 'p', '4', '2'): case mmioFOURCC('m', 'p', '4', '3'): case mmioFOURCC('M', 'P', 'G', '4'): - case mmioFOURCC('M', 'P', '4', '1'): - case mmioFOURCC('M', 'P', '4', '2'): - case mmioFOURCC('M', 'P', '4', '3'): printf("Video in Microsoft MPEG-4 format\n"); drv_id=4; break; @@ -188,6 +192,19 @@ DrvOpen(LPARAM lParam2) printf("Video in Cinepak format\n"); drv_id=5; break; + case mmioFOURCC('V', 'C', 'R', '1'): + drv_id=9; + break; + case mmioFOURCC('V', 'C', 'R', '2'): + drv_id=10; + break; + case mmioFOURCC('i', '2', '6', '3'): + case mmioFOURCC('I', '2', '6', '3'): + drv_id=11; + break; +// case mmioFOURCC('Y', 'V', 'U', '9'): +// drv_id=12; +// break; default: printf("Unknown codec %X='%c%c%c%c'\n", fccHandler, fccHandler&0xFF, (fccHandler&0xFF00)>>8, @@ -204,6 +221,10 @@ DrvOpen(LPARAM lParam2) case 0x2://MS ADPCM drv_id=8; break; + case 0x55://MPEG Layer 3 + printf("MPEG Layer 3 ( 0x55 )\n"); + drv_id=12; + break; default: printf("Unknown ACM codec 0x%X\n", fccHandler); return (HDRVR)0; diff --git a/libs/winloader/elfdll.c b/libs/winloader/elfdll.c index f78ad8ca36..b65e2287c2 100644 --- a/libs/winloader/elfdll.c +++ b/libs/winloader/elfdll.c @@ -45,8 +45,7 @@ extern DWORD fixup_imports(WINE_MODREF *wm); extern void dump_exports(HMODULE hModule); /*---------------- END HACKS ---------------*/ -//char *extra_ld_library_path = "/usr/lib/win32"; -char *extra_ld_library_path = GST_WIN32_LIBDIR; +char *extra_ld_library_path = "/usr/lib/win32"; struct elfdll_image { diff --git a/libs/winloader/module.c b/libs/winloader/module.c index eda45d13ea..945c5b5083 100644 --- a/libs/winloader/module.c +++ b/libs/winloader/module.c @@ -14,7 +14,7 @@ #include #include - +/* #ifdef __linux__ #include #include @@ -40,7 +40,7 @@ struct modify_ldt_ldt_s { #define __NR_modify_ldt 123 #endif - +*/ #include #include #include @@ -64,7 +64,7 @@ modref_list; * * Convert an ldt_entry structure to the raw bytes of the descriptor. */ -static void LDT_EntryToBytes( unsigned long *buffer, const struct modify_ldt_ldt_s *content ) +/*static void LDT_EntryToBytes( unsigned long *buffer, const struct modify_ldt_ldt_s *content ) { *buffer++ = ((content->base_addr & 0x0000ffff) << 16) | (content->limit & 0x0ffff); @@ -77,7 +77,7 @@ static void LDT_EntryToBytes( unsigned long *buffer, const struct modify_ldt_ldt ((content->limit_in_pages != 0) << 23) | 0xf000; } - +*/ // // funcs: @@ -86,6 +86,7 @@ static void LDT_EntryToBytes( unsigned long *buffer, const struct modify_ldt_ldt // 1 write old mode // 0x11 write // +/* static int modify_ldt( int func, struct modify_ldt_ldt_s *ptr, unsigned long count ) { @@ -107,7 +108,7 @@ static int modify_ldt( int func, struct modify_ldt_ldt_s *ptr, "b" (func), "c" (ptr), "d" (sizeof(struct modify_ldt_ldt_s)*count) ); -#endif /* __PIC__ */ +#endif if (res >= 0) return res; errno = -res; return -1; @@ -147,7 +148,7 @@ static int install_fs() perror("install_fs"); MESSAGE("Couldn't install fs segment, expect segfault\n"); } -#endif /*linux*/ +#endif #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) { @@ -161,11 +162,11 @@ static int install_fs() MESSAGE("Did you reconfigure the kernel with \"options USER_LDT\"?\n"); } } -#endif /* __NetBSD__ || __FreeBSD__ || __OpenBSD__ */ +#endif __asm__ ( "movl $0xf,%eax\n\t" - "pushw %ax\n\t" +// "pushw %ax\n\t" "movw %ax, %fs\n\t" ); prev_struct=malloc(8); @@ -178,13 +179,15 @@ static int install_fs() }; static int uninstall_fs() { + printf("Uninstalling FS segment\n"); if(fs_seg==0) return -1; munmap(fs_seg, 0x30000); + fs_installed=0; return 0; } - +*/ //WINE_MODREF *local_wm=NULL; modref_list* local_wm=NULL; @@ -216,7 +219,7 @@ void MODULE_RemoveFromList(WINE_MODREF *mod) { free(list); local_wm=NULL; - uninstall_fs(); +// uninstall_fs(); return; } for(;list;list=list->prev) @@ -412,8 +415,8 @@ HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) SetLastError(ERROR_INVALID_PARAMETER); return 0; } - if(fs_installed==0) - install_fs(); +// if(fs_installed==0) +// install_fs(); wm = MODULE_LoadLibraryExA( libname, hfile, flags ); diff --git a/libs/winloader/pe_image.c b/libs/winloader/pe_image.c index a98529a2cc..6342d1f15e 100644 --- a/libs/winloader/pe_image.c +++ b/libs/winloader/pe_image.c @@ -55,7 +55,7 @@ #include #include -#include "externals.h" +#include "win32.h" #define RVA(x) ((void *)((char *)load_addr+(unsigned int)(x))) diff --git a/include/registry.h b/libs/winloader/registry.h similarity index 99% rename from include/registry.h rename to libs/winloader/registry.h index 44026e93b7..94f45fc64a 100644 --- a/include/registry.h +++ b/libs/winloader/registry.h @@ -15,11 +15,11 @@ extern "C" { long RegOpenKeyExA(long key, const char* subkey, long reserved, long access, int* newkey); long RegCloseKey(long key); long RegQueryValueExA(long key, const char* value, int* reserved, int* type, int* data, int* count); -long RegCreateKeyExA(long key, const char* name, long reserved, - void* classs, long options, long security, +long RegCreateKeyExA(long key, const char* name, long reserved, + void* classs, long options, long security, void* sec_attr, int* newkey, int* status) ; long RegSetValueExA(long key, const char* name, long v1, long v2, void* data, long size); #ifdef __cplusplus }; #endif -#endif +#endif \ No newline at end of file diff --git a/libs/winloader/vfl.c b/libs/winloader/vfl.c index b6e26a4d8b..c0b17d107a 100644 --- a/libs/winloader/vfl.c +++ b/libs/winloader/vfl.c @@ -338,6 +338,13 @@ ICSendMessage(HIC hic,unsigned int msg,long lParam1,long lParam2) { // printf("private=%x\n", whic->private); __asm__ __volatile__ ("fsave (%0)\n\t": :"r"(&qw)); STORE_ALL; + /*__asm__ + ( + "pushl %eax\n\t" + "movl $0xf,%eax\n\t" + "movw %ax, %fs\n\t" + "popl %eax\n\t" + );*/ ret = whic->driverproc(whic->private,1,msg,lParam1,lParam2); REST_ALL; __asm__ __volatile__ ("frstor (%0)\n\t": :"r"(&qw)); diff --git a/libs/winloader/externals.c b/libs/winloader/win32.c similarity index 93% rename from libs/winloader/externals.c rename to libs/winloader/win32.c index 00b8c60a31..0c23b932c9 100644 --- a/libs/winloader/externals.c +++ b/libs/winloader/win32.c @@ -1,4 +1,14 @@ -#include "externals.h" +/*********************************************************** + + Win32 emulation code. Functions that emulate + responses from corresponding Win32 API calls. + Since we are not going to be able to load + virtually any DLL, we can only implement this + much, adding needed functions with each new codec. + +************************************************************/ + +#include "win32.h" #include #include #include @@ -120,16 +130,24 @@ int my_release(char* memory) #else void* my_mreq(int size, int to_zero) { + void* answer; if(to_zero) - return calloc(size, 1); - else - return malloc(size); + answer=calloc(size+4, 1); + else + answer=malloc(size+4); + *(int*)answer=size; + return (int*)answer+1; } int my_release(char* memory) { - free(memory); + if(memory==0)return 0; + free(memory-4); return 0; } +int my_size(char* memory) +{ + return *(int*)(memory-4); +} #endif extern int unk_exp1; @@ -526,7 +544,14 @@ long WINAPI expHeapFree(int arg1, int arg2, void* ptr) my_release(ptr); return 1; } - +long WINAPI expHeapSize(int heap, int flags, void* pointer) +{ + return my_size(pointer); +} +long WINAPI expGetProcessHeap(void) +{ + return 1; +} void* WINAPI expVirtualAlloc(void* v1, long v2, long v3, long v4) { void* z; @@ -972,8 +997,11 @@ LPCSTR WINAPI expGetEnvironmentStrings() int WINAPI expGetStartupInfoA(STARTUPINFOA *s) { + int i; dbgprintf("GetStartupInfoA\n"); - return 1; + for(i=0; itype, + GTK_SIGNAL_OFFSET (GstExampleClass, asdf), + gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, + GST_TYPE_EXAMPLE); + + gtk_object_class_add_signals (gtkobject_class, gst_example_signals, + LAST_SIGNAL); + + /* The last thing is to provide the functions that implement get and set + * of arguments. + */ gtkobject_class->set_arg = gst_example_set_arg; gtkobject_class->get_arg = gst_example_get_arg; } +/* This function is responsible for initializing a specific instance of + * the plugin. + */ static void gst_example_init(GstExample *example) { + /* First we create the sink pad, which is the input to the element. + * We will use the sink_template constructed in the plugin_init function + * (below) to quickly generate the pad we need. + */ example->sinkpad = gst_pad_new_from_template (sink_template, "sink"); - gst_element_add_pad(GST_ELEMENT(example),example->sinkpad); + /* Setting the chain function allows us to supply the function that will + * actually be performing the work. Without this, the element would do + * nothing, with undefined results (assertion failures and such). + */ gst_pad_set_chain_function(example->sinkpad,gst_example_chain); + /* We then must add this pad to the element's list of pads. The base + * element class manages the list of pads, and provides accessors to it. + */ + gst_element_add_pad(GST_ELEMENT(example),example->sinkpad); + /* The src pad, the output of the element, is created and registered + * in the same way, with the exception of the chain function. Source + * pads don't have chain functions, because they can't accept buffers, + * they only produce them. + */ example->srcpad = gst_pad_new_from_template (src_template, "src"); gst_element_add_pad(GST_ELEMENT(example),example->srcpad); + /* Initialization of element's private variables. */ example->active = FALSE; } +/* The chain function is the heart of the element. It's where all the + * work is done. It is passed a pointer to the pad in question, as well + * as the buffer provided by the peer element. + */ static void gst_example_chain (GstPad *pad, GstBuffer *buf) { GstExample *example; + GstBuffer *outbuf; + /* Some of these checks are of dubious value, since if there were not + * already true, the chain function would never be called. + */ g_return_if_fail(pad != NULL); g_return_if_fail(GST_IS_PAD(pad)); g_return_if_fail(buf != NULL); - //g_return_if_fail(GST_IS_BUFFER(buf)); + /* We need to get a pointer to the element this pad belogs to. */ example = GST_EXAMPLE(gst_pad_get_parent (pad)); + /* A few more sanity checks to make sure that the element that owns + * this pad is the right kind of element, in case something got confused. + */ g_return_if_fail(example != NULL); g_return_if_fail(GST_IS_EXAMPLE(example)); + /* If we are supposed to be doing something, here's where it happens. */ if (example->active) { - /* DO STUFF */ - } + /* In this example we're going to copy the buffer to another one, + * so we need to allocate a new buffer first. */ + outbuf = gst_buffer_new(); - gst_pad_push(example->srcpad,buf); + /* We need to copy the size and offset of the buffer at a minimum. */ + GST_BUFFER_SIZE (outbuf) = GST_BUFFER_SIZE (buf); + GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buf); + + /* Then allocate the memory for the new buffer */ + GST_BUFFER_DATA (outbuf) = (guchar *)g_malloc (GST_BUFFER_SIZE (outbuf)); + + /* Then copy the data in the incoming buffer into the new buffer. */ + memcpy (GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (outbuf)); + + /* When we're done with the buffer, we push it on to the next element + * in the pipeline, through the element's source pad, which is stored + * in the element's structure. + */ + gst_pad_push(example->srcpad,outbuf); + + /* For fun we'll emit our useless signal here */ + gtk_signal_emit (GTK_OBJECT (example), gst_example_signals[ASDF], + example); + + /* If we're not doing something, just send the original incoming buffer. */ + } else { + gst_pad_push(example->srcpad,buf); + } } +/* Arguments are part of the Gtk+ object system, and these functions + * enable the element to respond to various arguments. + */ static void gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id) { GstExample *example; - /* it's not null if we got it, but it might not be ours */ + /* It's not null if we got it, but it might not be ours */ g_return_if_fail(GST_IS_EXAMPLE(object)); + + /* Get a pointer of the right type. */ example = GST_EXAMPLE(object); - switch(id) { + /* Check the argument id to see which argument we're setting. */ + switch (id) { case ARG_ACTIVE: + /* Here we simply copy the value of the argument to our private + * storage. More complex operations can be done, but beware that + * they may occur at any time, possibly even while your chain function + * is running, if you are using threads. + */ example->active = GTK_VALUE_INT(*arg); g_print("example: set active to %d\n",example->active); break; @@ -171,12 +305,13 @@ gst_example_set_arg (GtkObject *object,GtkArg *arg,guint id) } } +/* The set function is simply the inverse of the get fuction. */ static void gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id) { GstExample *example; - /* it's not null if we got it, but it might not be ours */ + /* It's not null if we got it, but it might not be ours */ g_return_if_fail(GST_IS_EXAMPLE(object)); example = GST_EXAMPLE(object); @@ -190,25 +325,45 @@ gst_example_get_arg (GtkObject *object,GtkArg *arg,guint id) } } +/* This is the entry into the plugin itself. When the plugin loads, + * this function is called to register everything that the plugin provides. + */ GstPlugin* plugin_init (GModule *module) { GstPlugin *plugin; GstElementFactory *factory; + /* First we try to create a new Plugin structure. */ plugin = gst_plugin_new("example"); + /* If we get a NULL back, chances are we're already loaded. */ g_return_val_if_fail(plugin != NULL, NULL); + /* We need to create an ElementFactory for each element we provide. + * This consists of the name of the element, the GtkType identifier, + * and a pointer to the details structure at the top of the file. + */ factory = gst_elementfactory_new("example", GST_TYPE_EXAMPLE, &example_details); g_return_val_if_fail(factory != NULL, NULL); + /* The pad templates can be easily generated from the factories above, + * and then added to the list of padtemplates for the elementfactory. + * Note that the generated padtemplates are stored in static global + * variables, for the gst_example_init function to use later on. + */ sink_template = gst_padtemplate_new (&sink_factory); gst_elementfactory_add_padtemplate (factory, sink_template); src_template = gst_padtemplate_new (&src_factory); gst_elementfactory_add_padtemplate (factory, src_template); + /* The very last thing is to register the elementfactory with the plugin. */ gst_plugin_add_factory (plugin, factory); + /* Now we can return the pointer to the newly created Plugin object. */ return plugin; + + /* At this point, the GStreamer core registers the plugin, its + * elementfactories, padtemplates, etc., for use in you application. + */ } diff --git a/tests/old/examples/plugins/example.h b/tests/old/examples/plugins/example.h index d7f19a3f99..840b8a3d18 100644 --- a/tests/old/examples/plugins/example.h +++ b/tests/old/examples/plugins/example.h @@ -28,36 +28,61 @@ extern "C" { #endif /* __cplusplus */ -/* Definition of structure storing data for this element. */ +/* This is the definition of the element's object structure. */ typedef struct _GstExample GstExample; +/* The structure itself is derived from GstElement, as can be seen by the + * fact that there's a complete instance of the GstElement structure at + * the beginning of the object. This allows the element to be cast to + * an Element or even an Object. + */ struct _GstExample { GstElement element; + /* We need to keep track of our pads, so we do so here. */ GstPad *sinkpad,*srcpad; - gint8 active; + /* We'll use this to decide whether to do anything to the data we get. */ + gboolean active; }; -/* Standard definition defining a class for this element. */ +/* The other half of the object is its class. The class also derives from + * the same parent, though it must be the class structure this time. + * Function pointers for polymophic methods and signals are placed in this + * structure. */ typedef struct _GstExampleClass GstExampleClass; + struct _GstExampleClass { GstElementClass parent_class; + + /* signals */ + void (*asdf) (GstElement *element, GstExample *example); }; -/* Standard macros for defining types for this element. */ +/* Five standard preprocessing macros are used in the Gtk+ object system. + * The first uses the object's _get_type function to return the GtkType + * of the object. + */ #define GST_TYPE_EXAMPLE \ (gst_example_get_type()) +/* The second is a checking cast to the correct type. If the object passed + * is not the right type, a warning will be generated on stderr. + */ #define GST_EXAMPLE(obj) \ (GTK_CHECK_CAST((obj),GST_TYPE_EXAMPLE,GstExample)) +/* The third is a checking cast of the class instead of the object. */ #define GST_EXAMPLE_CLASS(klass) \ (GTK_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample)) +/* The last two simply check to see if the passed pointer is an object or + * class of the correct type. */ #define GST_IS_EXAMPLE(obj) \ (GTK_CHECK_TYPE((obj),GST_TYPE_EXAMPLE)) #define GST_IS_EXAMPLE_CLASS(obj) \ (GTK_CHECK_CLASS_TYPE((klass),GST_TYPE_EXAMPLE)) -/* Standard function returning type information. */ +/* This is the only prototype needed, because it is used in the above + * GST_TYPE_EXAMPLE macro. + */ GtkType gst_example_get_type(void); diff --git a/tools/README b/tools/README index 5d9ffe8fae..71d730c53e 100644 --- a/tools/README +++ b/tools/README @@ -1,5 +1,5 @@ -launch -====== +gstreamer-launch +================ This is a tool that will construct pipelines based on a command-line syntax. The syntax is rather complex to enable all the features I want it