From 90ac5da6d6fe07dc902502cfed96a779b1717e23 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 1 Mar 2001 22:36:26 +0000 Subject: [PATCH] Merge with the main trunk. Original commit message from CVS: Merge with the main trunk. GstPlay needed some changes for the dynamic pads in the avidecoder since the new autoplugger doesn't know about the outher elements. The next version of the autoplugger will also handle the audfio/videosink connections and will do a complete end-to-end autoplugging. --- Makefile.am | 13 +- configure.in | 50 +- debian/.gitignore | 2 + debian/Makefile.am | 33 + debian/README.Debian | 38 + debian/changelog | 23 + debian/control | 143 + debian/copyright | 29 + debian/gsteditor.files | 2 + debian/gsteditor.menu | 5 + debian/gstmediaplay.files | 2 + debian/gstmediaplay.menu | 5 + debian/gstreamer-cdparanoia.files | 1 + debian/gstreamer-common.files | 48 + debian/gstreamer-doc.files | 1 + debian/gstreamer-elements.files | 1 + debian/gstreamer-esd.files | 1 + debian/gstreamer-lame.files | 1 + debian/gstreamer-mpg123.files | 1 + debian/gstreamer-plugin-template.postinst | 25 + debian/gstreamer-plugin-template.prerm | 23 + debian/gstreamer-runtime.files | 1 + debian/gstreamer-runtime.postinst | 47 + debian/gstreamer-tools.files | 2 + debian/gstreamer-vorbis.files | 1 + debian/libgst-dev.files | 6 + debian/libgst0.files | 1 + debian/libgst0.postinst | 47 + debian/libgsteditor-dev.files | 2 + debian/libgsteditor0.files | 1 + debian/libgsteditor0.postinst | 47 + debian/libgstmediaplay-dev.files | 2 + debian/libgstmediaplay0.files | 1 + debian/libgstmediaplay0.postinst | 47 + debian/rules | 146 + docs/Makefile.am | 2 +- docs/fwg/testapp.sgml | 2 +- docs/fwg/titlepage.sgml | 2 +- docs/gst/Makefile.am | 1 - docs/gst/gstreamer-docs.sgml | 2 - docs/gst/gstreamer-sections.txt | 24 +- docs/gst/tmpl/gstbuffer.sgml | 35 +- docs/gst/tmpl/gstcaps.sgml | 2 + docs/gst/tmpl/gstdisksrc.sgml | 9 +- docs/gst/tmpl/gstobject.sgml | 12 +- docs/gst/tmpl/gstpad.sgml | 66 +- docs/gst/tmpl/gstplugin.sgml | 8 + docs/gst/tmpl/gstreamer-unused.sgml | 91 +- docs/manual/Makefile.am | 3 +- docs/manual/bins.sgml | 2 +- docs/manual/debugging.sgml | 89 + docs/manual/dynamic.sgml | 2 +- docs/manual/gstreamer-manual.sgml | 8 +- docs/manual/helloworld.sgml | 2 +- docs/manual/helloworld2.sgml | 2 +- docs/manual/pads.sgml | 62 +- docs/manual/plugins.sgml | 2 +- docs/manual/queues.sgml | 2 +- docs/manual/quotes.sgml | 20 + docs/manual/threads.sgml | 2 +- docs/manual/typedetection.sgml | 2 +- docs/manual/xml.sgml | 150 +- docs/plugins/Makefile.am | 4 +- docs/plugins/gstdoc-scanobj | 2 +- docs/plugins/tmpl/ac3parse.sgml | 5 - docs/plugins/tmpl/audioscale.sgml | 5 - docs/plugins/tmpl/gstaviencoder.sgml | 10 - docs/plugins/tmpl/gstmpeg2enc.sgml | 5 - docs/plugins/tmpl/gstmpeg2play.sgml | 5 - docs/plugins/tmpl/gstmpeg_play.sgml | 8 - .../tmpl/gstreamer-plugins-unused.sgml | 14786 ++++++++-------- docs/plugins/tmpl/gstspectrum.sgml | 5 - docs/plugins/tmpl/gstv4lsrc.sgml | 70 - docs/plugins/tmpl/gstwindec.sgml | 10 - docs/plugins/tmpl/gstwinenc.sgml | 33 - docs/plugins/tmpl/median.sgml | 10 - docs/plugins/tmpl/mp3parse.sgml | 5 - docs/plugins/tmpl/mpeg1parse.sgml | 5 - docs/plugins/tmpl/mpeg2parse.sgml | 5 - docs/plugins/tmpl/mpeg2subt.sgml | 5 - docs/plugins/tmpl/smooth.sgml | 15 - docs/plugins/tmpl/smoothwave.sgml | 15 - docs/plugins/tmpl/stereo.sgml | 10 - docs/plugins/tmpl/synaesthesia.sgml | 15 - docs/plugins/tmpl/system_encode.sgml | 10 - docs/plugins/tmpl/videoscale.sgml | 10 - docs/plugins/tmpl/videosink.sgml | 39 - docs/plugins/tmpl/volume.sgml | 10 - docs/plugins/tmpl/vumeter.sgml | 30 - docs/random/NOTES-0.1.1 | 36 + docs/random/caps.dia | 1132 ++ docs/random/wtay/caps-negociation | 345 + examples/Makefile.am | 2 +- examples/plugins/example.c | 213 +- examples/plugins/example.h | 35 +- gst/Makefile.am | 59 +- gst/autoplug/gststaticautoplug.c | 44 + gst/elements/gstdisksrc.c | 2 +- gst/elements/gstelements.c | 23 +- gst/gst.c | 60 +- gst/gst.h | 8 + gst/gstbin.c | 24 +- gst/gstcaps.c | 4 +- gst/gstcaps.h | 6 +- gst/gstcpu.c | 11 +- gst/gstcpu.h | 2 + gst/gstelement.h | 10 +- gst/gstinfo.h | 2 +- gst/gstpad.c | 84 +- gst/gstpad.h | 11 +- gst/gstplugin.c | 22 +- gst/gstplugin.h | 2 + gst/gstprops.c | 16 +- gst/gstqueue.c | 6 +- gst/gstscheduler.c | 1 + gst/gstthread.c | 4 +- gst/gsttype.c | 1 + gst/gstutils.h | 8 + gstplay/gstmediaplay.c | 2 + gstplay/gstplay.c | 47 +- gstreamer-config.in | 6 +- include/Makefile.am | 3 - include/default.h | 15 - include/wine/msacm.h | 2 +- libs/Makefile.am | 4 +- libs/colorspace/rgb2rgb.c | 36 + libs/getbits/gstgetbits.c | 8 +- libs/getbits/gstgetbits.h | 17 +- libs/getbits/gstgetbits_inl.h | 17 +- libs/videoscale/Makefile.am | 2 +- libs/winloader/Makefile.am | 6 +- libs/winloader/afl.c | 1 + {include => libs/winloader}/avifmt.h | 0 libs/winloader/driver.c | 51 +- libs/winloader/elfdll.c | 3 +- libs/winloader/module.c | 27 +- libs/winloader/pe_image.c | 2 +- {include => libs/winloader}/registry.h | 6 +- libs/winloader/vfl.c | 7 + libs/winloader/{externals.c => win32.c} | 88 +- libs/winloader/{externals.h => win32.h} | 0 plugins/elements/gstdisksrc.c | 2 +- plugins/elements/gstelements.c | 23 +- plugins/elements/gstqueue.c | 6 +- test/videotest.c | 27 +- tests/old/examples/Makefile.am | 2 +- tests/old/examples/plugins/example.c | 213 +- tests/old/examples/plugins/example.h | 35 +- tools/README | 4 +- 149 files changed, 11324 insertions(+), 8045 deletions(-) create mode 100644 debian/.gitignore create mode 100644 debian/Makefile.am create mode 100644 debian/README.Debian create mode 100644 debian/changelog create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/gsteditor.files create mode 100644 debian/gsteditor.menu create mode 100644 debian/gstmediaplay.files create mode 100644 debian/gstmediaplay.menu create mode 100644 debian/gstreamer-cdparanoia.files create mode 100644 debian/gstreamer-common.files create mode 100644 debian/gstreamer-doc.files create mode 100644 debian/gstreamer-elements.files create mode 100644 debian/gstreamer-esd.files create mode 100644 debian/gstreamer-lame.files create mode 100644 debian/gstreamer-mpg123.files create mode 100644 debian/gstreamer-plugin-template.postinst create mode 100644 debian/gstreamer-plugin-template.prerm create mode 100644 debian/gstreamer-runtime.files create mode 100644 debian/gstreamer-runtime.postinst create mode 100644 debian/gstreamer-tools.files create mode 100644 debian/gstreamer-vorbis.files create mode 100644 debian/libgst-dev.files create mode 100644 debian/libgst0.files create mode 100644 debian/libgst0.postinst create mode 100644 debian/libgsteditor-dev.files create mode 100644 debian/libgsteditor0.files create mode 100644 debian/libgsteditor0.postinst create mode 100644 debian/libgstmediaplay-dev.files create mode 100644 debian/libgstmediaplay0.files create mode 100644 debian/libgstmediaplay0.postinst create mode 100755 debian/rules create mode 100644 docs/manual/debugging.sgml create mode 100644 docs/random/NOTES-0.1.1 create mode 100644 docs/random/caps.dia create mode 100644 docs/random/wtay/caps-negociation delete mode 100644 include/default.h rename {include => libs/winloader}/avifmt.h (100%) rename {include => libs/winloader}/registry.h (99%) rename libs/winloader/{externals.c => win32.c} (93%) rename libs/winloader/{externals.h => win32.h} (100%) 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