mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-27 14:31:01 +00:00
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.
This commit is contained in:
parent
81197b7c06
commit
90ac5da6d6
149 changed files with 11324 additions and 8045 deletions
13
Makefile.am
13
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)
|
||||
|
|
50
configure.in
50
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/glade.h>],[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])
|
||||
|
|
2
debian/.gitignore
vendored
Normal file
2
debian/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.debhelper
|
||||
*substvars
|
33
debian/Makefile.am
vendored
Normal file
33
debian/Makefile.am
vendored
Normal file
|
@ -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
|
38
debian/README.Debian
vendored
Normal file
38
debian/README.Debian
vendored
Normal file
|
@ -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 <dlehn@vt.edu> Fri, 19 Jan 2001 19:13:06 -0500
|
23
debian/changelog
vendored
Normal file
23
debian/changelog
vendored
Normal file
|
@ -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 <dlehn@vt.edu> 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 <dlehn@vt.edu> Sat, 24 Feb 2001 18:31:36 -0500
|
||||
|
||||
gstreamer (0.1.0-1) unstable; urgency=low
|
||||
|
||||
* Initial Release.
|
||||
|
||||
-- David I. Lehn <dlehn@vt.edu> Mon, 15 Jan 2001 18:25:18 -0500
|
||||
|
||||
Local variables:
|
||||
mode: debian-changelog
|
||||
add-log-mailing-address "dlehn@vt.edu"
|
||||
End:
|
143
debian/control
vendored
Normal file
143
debian/control
vendored
Normal file
|
@ -0,0 +1,143 @@
|
|||
Source: gstreamer
|
||||
Section: x11
|
||||
Priority: optional
|
||||
Maintainer: David I. Lehn <dlehn@vt.edu>
|
||||
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
|
29
debian/copyright
vendored
Normal file
29
debian/copyright
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
This package was debianized by David I. Lehn <dlehn@vt.edu> on
|
||||
Mon, 15 Jan 2001 18:21:37 -0500.
|
||||
|
||||
It was downloaded from http://gstreamer.net/
|
||||
|
||||
Upstream Author(s):
|
||||
Erik Walthinsen <omegahacker@users.sourceforge.net>
|
||||
Wim Taymans <wim.taymans@chello.be>
|
||||
Richard Boulton <richard@tartarus.org>
|
||||
|
||||
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'.
|
||||
|
2
debian/gsteditor.files
vendored
Normal file
2
debian/gsteditor.files
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
usr/bin/gsteditor
|
||||
usr/share/gsteditor
|
5
debian/gsteditor.menu
vendored
Normal file
5
debian/gsteditor.menu
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
?package(gsteditor): \
|
||||
needs=X11 \
|
||||
section=Apps/Viewers \
|
||||
title="GStreamer Editor" \
|
||||
command="/usr/bin/gsteditor"
|
2
debian/gstmediaplay.files
vendored
Normal file
2
debian/gstmediaplay.files
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
usr/bin/gstmediaplay
|
||||
usr/share/gstmediaplay
|
5
debian/gstmediaplay.menu
vendored
Normal file
5
debian/gstmediaplay.menu
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
?package(gstmediaplay): \
|
||||
needs=X11 \
|
||||
section=Apps/Viewers \
|
||||
title="GStreamer Media Player" \
|
||||
command="/usr/bin/gstmediaplay"
|
1
debian/gstreamer-cdparanoia.files
vendored
Normal file
1
debian/gstreamer-cdparanoia.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/gst/libcdparanoia.*
|
48
debian/gstreamer-common.files
vendored
Normal file
48
debian/gstreamer-common.files
vendored
Normal file
|
@ -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.*
|
1
debian/gstreamer-doc.files
vendored
Normal file
1
debian/gstreamer-doc.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/share/gstreamer
|
1
debian/gstreamer-elements.files
vendored
Normal file
1
debian/gstreamer-elements.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/gst/libgstelements.*
|
1
debian/gstreamer-esd.files
vendored
Normal file
1
debian/gstreamer-esd.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/gst/libesdsink.*
|
1
debian/gstreamer-lame.files
vendored
Normal file
1
debian/gstreamer-lame.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/gst/libgstlame.*
|
1
debian/gstreamer-mpg123.files
vendored
Normal file
1
debian/gstreamer-mpg123.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/gst/libmpg123.*
|
25
debian/gstreamer-plugin-template.postinst
vendored
Normal file
25
debian/gstreamer-plugin-template.postinst
vendored
Normal file
|
@ -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
|
||||
|
23
debian/gstreamer-plugin-template.prerm
vendored
Normal file
23
debian/gstreamer-plugin-template.prerm
vendored
Normal file
|
@ -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
|
||||
|
1
debian/gstreamer-runtime.files
vendored
Normal file
1
debian/gstreamer-runtime.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/bin/gstreamer-register
|
47
debian/gstreamer-runtime.postinst
vendored
Normal file
47
debian/gstreamer-runtime.postinst
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/bin/sh
|
||||
# postinst script for gstreamer
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
||||
# <new-version>
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# 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
|
||||
|
||||
|
2
debian/gstreamer-tools.files
vendored
Normal file
2
debian/gstreamer-tools.files
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
usr/bin/gstreamer-inspect
|
||||
usr/bin/gstreamer-launch
|
1
debian/gstreamer-vorbis.files
vendored
Normal file
1
debian/gstreamer-vorbis.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/gst/libgstvorbis.*
|
6
debian/libgst-dev.files
vendored
Normal file
6
debian/libgst-dev.files
vendored
Normal file
|
@ -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
|
1
debian/libgst0.files
vendored
Normal file
1
debian/libgst0.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/libgst.so.*
|
47
debian/libgst0.postinst
vendored
Normal file
47
debian/libgst0.postinst
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/bin/sh
|
||||
# postinst script for gstreamer
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
||||
# <new-version>
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# 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
|
||||
|
||||
|
2
debian/libgsteditor-dev.files
vendored
Normal file
2
debian/libgsteditor-dev.files
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
usr/lib/libgsteditor.la
|
||||
usr/lib/libgsteditor.so
|
1
debian/libgsteditor0.files
vendored
Normal file
1
debian/libgsteditor0.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/libgsteditor.so.*
|
47
debian/libgsteditor0.postinst
vendored
Normal file
47
debian/libgsteditor0.postinst
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/bin/sh
|
||||
# postinst script for gstreamer
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
||||
# <new-version>
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# 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
|
||||
|
||||
|
2
debian/libgstmediaplay-dev.files
vendored
Normal file
2
debian/libgstmediaplay-dev.files
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
usr/lib/libgstmediaplay.la
|
||||
usr/lib/libgstmediaplay.so
|
1
debian/libgstmediaplay0.files
vendored
Normal file
1
debian/libgstmediaplay0.files
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
usr/lib/libgstmediaplay.so.*
|
47
debian/libgstmediaplay0.postinst
vendored
Normal file
47
debian/libgstmediaplay0.postinst
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/bin/sh
|
||||
# postinst script for gstreamer
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
||||
# <new-version>
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# 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
|
||||
|
||||
|
146
debian/rules
vendored
Executable file
146
debian/rules
vendored
Executable file
|
@ -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
|
|
@ -1,4 +1,4 @@
|
|||
SUBDIRS = manual fwg gst libs
|
||||
SUBDIRS = manual fwg gst libs plugins
|
||||
|
||||
EXTRA_DIST = random slides manuals.mak
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</para>
|
||||
</chapter>
|
||||
|
||||
<chapter id="cha-testapp-connect">
|
||||
<chapter id="cha-testapp-running">
|
||||
<title>Running the pipeline</title>
|
||||
<para>
|
||||
</para>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<legalnotice>
|
||||
<legalnotice id="legalnotice">
|
||||
<para>
|
||||
This material may be distributed only subject to the terms and
|
||||
conditions set forth in the Open Publication License, v1.0 or
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<!entity GstFakeSrc SYSTEM "sgml/gstfakesrc.sgml">
|
||||
<!entity GstFakeSink SYSTEM "sgml/gstfakesink.sgml">
|
||||
<!entity GstDiskSrc SYSTEM "sgml/gstdisksrc.sgml">
|
||||
<!entity GstAsyncDiskSrc SYSTEM "sgml/gstasyncdisksrc.sgml">
|
||||
<!entity GstHttpSrc SYSTEM "sgml/gsthttpsrc.sgml">
|
||||
<!entity GstFdSrc SYSTEM "sgml/gstfdsrc.sgml">
|
||||
<!entity GstAudioSrc SYSTEM "sgml/gstaudiosrc.sgml">
|
||||
|
@ -125,7 +124,6 @@ with some more specialized elements.</para>
|
|||
&GstFakeSink;
|
||||
|
||||
&GstDiskSrc;
|
||||
&GstAsyncDiskSrc;
|
||||
&GstHttpSrc;
|
||||
|
||||
&GstAudioSrc;
|
||||
|
|
|
@ -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
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gstasyncdisksrc</FILE>
|
||||
<TITLE>GstAsyncDiskSrc</TITLE>
|
||||
GstAsyncDiskSrcFlags
|
||||
<SUBSECTION Standard>
|
||||
GstAsyncDiskSrc
|
||||
GstAsyncDiskSrcClass
|
||||
gst_asyncdisksrc_get_type
|
||||
GST_TYPE_ASYNCDISKSRC
|
||||
GST_ASYNCDISKSRC
|
||||
GST_ASYNCDISKSRC_CLASS
|
||||
GST_IS_ASYNCDISKSRC
|
||||
GST_IS_ASYNCDISKSRC_CLASS
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gstaudiosink</FILE>
|
||||
<TITLE>GstAudioSink</TITLE>
|
||||
|
@ -749,7 +738,6 @@ GST_DISKSRC
|
|||
GST_DISKSRC_CLASS
|
||||
GST_IS_DISKSRC
|
||||
GST_IS_DISKSRC_CLASS
|
||||
gst_disksrc_details
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
|
|
|
@ -134,39 +134,6 @@ This macro releases a lock on the object.
|
|||
<!-- ##### ENUM GstBufferFlags ##### -->
|
||||
<para>
|
||||
|
||||
FIXME this is strange.
|
||||
|
||||
<informaltable pgwide=1 frame="none" role="enum">
|
||||
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>GST_BUFFER_READONLY</entry>
|
||||
<entry>the buffer is read only</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>GST_BUFFER_EOS</entry>
|
||||
<entry>this buffer is the last one in the stream</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>GST_BUFFER_ORIGINAL</entry>
|
||||
<entry>this buffer not a copy</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>GST_BUFFER_DONTFREE</entry>
|
||||
<entry>do not try to free the data when this buffer is unref-ed</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>GST_BUFFER_FLUSH</entry>
|
||||
<entry>this buffer is not related to previous buffers. This flag is mainly
|
||||
used when data in a stream has been skipped</entry>
|
||||
</row>
|
||||
|
||||
</tbody></tgroup></informaltable>
|
||||
|
||||
</para>
|
||||
|
||||
@GST_BUFFER_READONLY: the buffer is read only
|
||||
|
@ -175,7 +142,7 @@ used when data in a stream has been skipped</entry>
|
|||
@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
|
||||
|
||||
<!-- ##### STRUCT GstBuffer ##### -->
|
||||
<para>
|
||||
|
|
|
@ -102,6 +102,8 @@ a mime-type and a set of properties.
|
|||
</para>
|
||||
|
||||
@caps:
|
||||
@Param2:
|
||||
<!-- # Unused Parameters # -->
|
||||
@typeid:
|
||||
|
||||
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
GstDiskSrc
|
||||
|
||||
<!-- ##### SECTION Short_Description ##### -->
|
||||
Synchronous read from a file (disksrc)
|
||||
Asynchronous read from a file (disksrc)
|
||||
|
||||
<!-- ##### SECTION Long_Description ##### -->
|
||||
<para>
|
||||
Synchonously read buffers from a file. If you need asynchronous reading
|
||||
with seeking capabilities use a <classname>GstAsynDiskSrc</classname> instead.
|
||||
Asynchonously read buffers from a file.
|
||||
|
||||
</para>
|
||||
|
||||
|
@ -45,11 +44,11 @@ Specify how many bytes to read at a time.
|
|||
|
||||
<!-- ##### ARG GstDiskSrc:offset ##### -->
|
||||
<para>
|
||||
Get the current offset in the file.
|
||||
Get/set the current offset in the file.
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstDiskSrc:size ##### -->
|
||||
<para>
|
||||
|
||||
Get the size of the file.
|
||||
</para>
|
||||
|
||||
|
|
|
@ -101,26 +101,26 @@ This macro releases a lock on the object.
|
|||
|
||||
<!-- ##### MACRO GST_GET_LOCK ##### -->
|
||||
<para>
|
||||
|
||||
Acquire a reference to the mutex of this object.
|
||||
</para>
|
||||
|
||||
@obj:
|
||||
@obj: Object to get the mutex of.
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_OBJECT_PARENT ##### -->
|
||||
<para>
|
||||
|
||||
Get the parent of this object
|
||||
</para>
|
||||
|
||||
@obj:
|
||||
@obj: Object to get the parent of.
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_OBJECT_NAME ##### -->
|
||||
<para>
|
||||
|
||||
Get the name of this object
|
||||
</para>
|
||||
|
||||
@obj:
|
||||
@obj: Object to get the name of.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_object_new ##### -->
|
||||
|
|
|
@ -124,12 +124,14 @@ The function that will be called when pulling a buffer.
|
|||
<!-- ##### USER_FUNCTION GstPadGetRegionFunction ##### -->
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
|
||||
@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
|
||||
<!-- # Unused Parameters # -->
|
||||
@size: the size of the region to get
|
||||
|
@ -172,18 +174,28 @@ The function that will be called when pulling buffers.
|
|||
@Returns: a GstBuffer
|
||||
|
||||
|
||||
<!-- ##### ENUM GstRegionType ##### -->
|
||||
<para>
|
||||
the region types for #gst_pad_pullregion.
|
||||
</para>
|
||||
|
||||
@GST_REGION_NONE: no type specified
|
||||
@GST_REGION_OFFSET_LEN: an offet/length pair
|
||||
@GST_REGION_TIME_LEN: a time start/length pair
|
||||
|
||||
<!-- ##### USER_FUNCTION GstPadPullRegionFunction ##### -->
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
|
||||
@pad: the pad to pull
|
||||
@type:
|
||||
@offset: the offset of the region to pull
|
||||
@len:
|
||||
@Returns: a GstBuffer
|
||||
<!-- # Unused Parameters # -->
|
||||
@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
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### ENUM GstPadDirection ##### -->
|
||||
|
@ -440,6 +452,8 @@ Destroy the pad.
|
|||
</para>
|
||||
|
||||
@pad:
|
||||
@buf:
|
||||
<!-- # Unused Parameters # -->
|
||||
@buffer:
|
||||
|
||||
|
||||
|
@ -466,16 +480,6 @@ Destroy the pad.
|
|||
@size:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_pad_select ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@nextpad:
|
||||
@Varargs:
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_pad_set_eos ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -514,6 +518,30 @@ Call the EOS function of the pad
|
|||
@elements:
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_RPAD_LEN ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@pad:
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_RPAD_OFFSET ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@pad:
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_RPAD_REGIONTYPE ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@pad:
|
||||
|
||||
|
||||
<!-- ##### STRUCT GstRealPad ##### -->
|
||||
<para>
|
||||
|
||||
|
|
|
@ -135,6 +135,14 @@ by the loader at statup.
|
|||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_plugin_add_path ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@path:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_library_load ##### -->
|
||||
<para>
|
||||
|
||||
|
|
|
@ -154,14 +154,6 @@ This macro usets the given flags.
|
|||
</para>
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_pipeline_add_src ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@pipeline:
|
||||
@src:
|
||||
|
||||
<!-- ##### MACRO DEBUG ##### -->
|
||||
<para>
|
||||
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:
|
||||
|
||||
<!-- ##### USER_FUNCTION GstAutoplugListFunction ##### -->
|
||||
<para>
|
||||
Get a list of all elements. These elements will be used in autoplugging.
|
||||
</para>
|
||||
|
||||
@data: user data
|
||||
@Returns: a GList of elements
|
||||
|
||||
<!-- ##### FUNCTION gst_fdsink_new_with_fd ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -911,6 +895,15 @@ Specify the current offset in the file.
|
|||
|
||||
@klass:
|
||||
|
||||
<!-- ##### FUNCTION gst_pad_select ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@nextpad:
|
||||
@Varargs:
|
||||
@Returns:
|
||||
|
||||
<!-- ##### FUNCTION gst_identity_get_type ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -1019,12 +1012,6 @@ on its own.
|
|||
|
||||
@klass:
|
||||
|
||||
<!-- ##### MACRO GST_AUTOPLUG_MAX_COST ##### -->
|
||||
<para>
|
||||
The maximum cost of a certain connection.
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### SECTION ./tmpl/gstcolorspace.sgml:Short_Description ##### -->
|
||||
|
||||
|
||||
|
@ -1471,15 +1458,6 @@ This macro unsets the given state on the element.
|
|||
@pad:
|
||||
@parent:
|
||||
|
||||
<!-- ##### FUNCTION gst_autoplug_caps ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@srccaps:
|
||||
@sinkcaps:
|
||||
@Returns:
|
||||
|
||||
<!-- ##### FUNCTION gst_tee_new ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -1708,15 +1686,6 @@ This macro sets the given state on the element.
|
|||
</para>
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_autoplug_pads ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@srcpad:
|
||||
@sinkpad:
|
||||
@Returns:
|
||||
|
||||
<!-- ##### FUNCTION gst_src_push_region ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -2026,14 +1995,6 @@ GstFilter
|
|||
@GST_CAPS_ALWAYS:
|
||||
@GST_CAPS_MAYBE:
|
||||
|
||||
<!-- ##### FUNCTION gst_pipeline_autoplug ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@pipeline:
|
||||
@Returns:
|
||||
|
||||
<!-- ##### STRUCT GstPadClass ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_HTTPSRC ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -2239,6 +2201,13 @@ The end point of a filter graph
|
|||
@format:
|
||||
@args...:
|
||||
|
||||
<!-- ##### SECTION ./tmpl/gstasyncdisksrc.sgml:Long_Description ##### -->
|
||||
<para>
|
||||
Reads data from a file. You can seek to a specific location by setting
|
||||
the offset.
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### MACRO GST_IS_ASYNCDISKSRC_CLASS ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -2266,14 +2235,6 @@ The end point of a filter graph
|
|||
</para>
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_pipeline_add_sink ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@pipeline:
|
||||
@sink:
|
||||
|
||||
<!-- ##### SECTION ./tmpl/plugin.sgml:Title ##### -->
|
||||
plugin
|
||||
|
||||
|
@ -2336,14 +2297,6 @@ This macro checks to see if the given state is set.
|
|||
</para>
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gst_plugin_find_elementfactory ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@name:
|
||||
@Returns:
|
||||
|
||||
<!-- ##### FUNCTION gst_type_dump ##### -->
|
||||
<para>
|
||||
|
||||
|
@ -2387,16 +2340,6 @@ This macro sets the given flags.
|
|||
|
||||
@klass:
|
||||
|
||||
<!-- ##### USER_FUNCTION GstAutoplugCostFunction ##### -->
|
||||
<para>
|
||||
Calculate the cost between two elements.
|
||||
</para>
|
||||
|
||||
@src: the source element
|
||||
@dest: the destination element
|
||||
@data: optional user data
|
||||
@Returns: the cost for a connection between the two elements
|
||||
|
||||
<!-- ##### MACRO DEBUG_LEAVE_STRING ##### -->
|
||||
<para>
|
||||
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
89
docs/manual/debugging.sgml
Normal file
89
docs/manual/debugging.sgml
Normal file
|
@ -0,0 +1,89 @@
|
|||
<chapter id="cha-debugging">
|
||||
<title>Debugging</title>
|
||||
<para>
|
||||
GStreamer has an extensive set of debugging tools for
|
||||
plugin developers.
|
||||
</para>
|
||||
|
||||
<sect1>
|
||||
<title>Command line options</title>
|
||||
<para>
|
||||
Applications using the GStreamer libraries accept the following set
|
||||
of command line argruments to enable the debugging system.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<option>--gst-debug-mask=<replaceable>mask</replaceable></option>
|
||||
Sets the mask for the debugging output.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<option>--gst-info-mask=<replaceable>mask</replaceable></option>
|
||||
Sets the mask for the info output.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<option>--gst-plugin-spew</option>
|
||||
Enable printout of errors while loading GST plugins.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<option>--gst-plugin-path=<replaceable>PATH</replaceable></option>
|
||||
Add a directory to the plugin search path.
|
||||
</para>
|
||||
<listitem>
|
||||
<para>
|
||||
<option>--help</option> Print the a short desciption of the
|
||||
options and an overview of the current debugging/info masks
|
||||
set.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
<para>
|
||||
The follwing table gives an overview of the mask values and
|
||||
their meaning. (enabled) means that the corresponding flag
|
||||
has been set.
|
||||
</para>
|
||||
<programlisting>
|
||||
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
|
||||
</programlisting>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>Adding a custom debug handler</title>
|
||||
<para>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -23,12 +23,13 @@
|
|||
|
||||
<!ENTITY XML SYSTEM "xml.sgml">
|
||||
<!ENTITY PLUGINS SYSTEM "plugins.sgml">
|
||||
<!ENTITY DEBUGGING SYSTEM "debugging.sgml">
|
||||
<!ENTITY PROGRAMS SYSTEM "programs.sgml">
|
||||
<!ENTITY COMPONENTS SYSTEM "components.sgml">
|
||||
<!ENTITY QUOTES SYSTEM "quotes.sgml">
|
||||
]>
|
||||
|
||||
<book id="GStreamer">
|
||||
<book id="index">
|
||||
<bookinfo>
|
||||
|
||||
<authorgroup>
|
||||
|
@ -43,7 +44,7 @@
|
|||
</author>
|
||||
</authorgroup>
|
||||
|
||||
<legalnotice>
|
||||
<legalnotice id="legalnotice">
|
||||
<para>
|
||||
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 @@
|
|||
<partintro>
|
||||
<para>
|
||||
<application>GStreamer</application> comes prepackaged with a few programs.
|
||||
and some usefull debugging options.
|
||||
</para>
|
||||
</partintro>
|
||||
|
||||
&DEBUGGING;
|
||||
|
||||
&PROGRAMS;
|
||||
|
||||
&COMPONENTS;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="sec-pads-synamic">
|
||||
<sect2 id="sec-pads-dynamic">
|
||||
<title>Dynamic pads</title>
|
||||
<para>
|
||||
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[])
|
|||
</para>
|
||||
</note>
|
||||
</sect2>
|
||||
<sect2 id="sec-pads-request">
|
||||
<title>Request pads</title>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<programlisting>
|
||||
...
|
||||
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));
|
||||
...
|
||||
</programlisting>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<programlisting>
|
||||
...
|
||||
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));
|
||||
...
|
||||
</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id="sec-pads-description">
|
||||
<title>Capabilities of a GstPad</title>
|
||||
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,26 @@
|
|||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>16 Feb 2001</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<emphasis>wtay:</emphasis>
|
||||
I shipped a few commerical products to >40000 people now but
|
||||
GStreamer is way more exciting...
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>16 Feb 2001</term>
|
||||
<listitem>
|
||||
<para>
|
||||
*
|
||||
<emphasis>tool-man</emphasis>
|
||||
is a gstreamer groupie
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>14 Jan 2001</term>
|
||||
<listitem>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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[])
|
|||
<sect1 id="sec-xml-load">
|
||||
<title>Loading a GstElement from an XML file</title>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
|
@ -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.
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="sec-xml-custom">
|
||||
<title>Adding custom XML tags into the core XML data</title>
|
||||
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
To insert a hook into the element saving procedure you can connect
|
||||
a signal to the GstElement using the following piece of code:
|
||||
</para>
|
||||
<programlisting>
|
||||
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"));
|
||||
...
|
||||
</programlisting>
|
||||
<para>
|
||||
When the thread is saved, the object_save method will be caled. Our example
|
||||
will insert a comment tag:
|
||||
</para>
|
||||
<programlisting>
|
||||
static void
|
||||
object_saved (GstObject *object, xmlNodePtr parent, gpointer data)
|
||||
{
|
||||
xmlNodePtr child;
|
||||
|
||||
child = xmlNewChild(parent, ns, "comment", NULL);
|
||||
xmlNewChild(child, ns, "text", (gchar *)data);
|
||||
}
|
||||
</programlisting>
|
||||
<para>
|
||||
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:
|
||||
</para>
|
||||
<programlisting>
|
||||
...
|
||||
<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>
|
||||
...
|
||||
</programlisting>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We can extend our previous example with the following piece of
|
||||
code.
|
||||
</para>
|
||||
|
||||
<programlisting>
|
||||
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);
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
Whenever a new object has been loaded, the xml_loaded function will be
|
||||
called. this function looks like:
|
||||
</para>
|
||||
<programlisting>
|
||||
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;
|
||||
}
|
||||
}
|
||||
</programlisting>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -839,7 +839,7 @@ output_widget_pads (FILE *fp, GstElement *element)
|
|||
type = gst_type_find_by_id(1);
|
||||
|
||||
fprintf (fp, "<PAD>\n<NAME>%s::%s</NAME>\n",
|
||||
gtk_type_name(factory->type), pad->name);
|
||||
gtk_type_name(factory->type), gst_object_get_name (GST_OBJECT (pad)));
|
||||
|
||||
if (type) {
|
||||
fprintf(fp, "<MIME>%s</MIME>\n", type->mime);
|
||||
|
|
|
@ -14,8 +14,3 @@ Ac3Parse
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Ac3Parse:skip ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ Audioscale
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Audioscale:frequency ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ GstAviEncoder
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstAviEncoder:video ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstAviEncoder:audio ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ GstMpeg2enc
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstMpeg2enc:frames_per_second ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ GstMpeg2play
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstMpeg2play:frames_per_second ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,11 +14,3 @@ GstMpeg_play
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### SIGNAL GstMpeg_play::frame-decoded ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@gstmpeg_play: the object which received the signal.
|
||||
@arg1:
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -14,8 +14,3 @@ GstSpectrum
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSpectrum:width ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,73 +14,3 @@ GstV4lSrc
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:width ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:height ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:format ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:tune ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:tuned ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:input ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:norm ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:volume ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:mute ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:mode ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:color ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:bright ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:hue ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstV4lSrc:contrast ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ GstWinDec
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstWinDec:avi_header ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstWinDec:bitdepth ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,36 +14,3 @@ GstWinEnc
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### SIGNAL GstWinEnc::frame-encoded ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@gstwinenc: the object which received the signal.
|
||||
@arg1:
|
||||
|
||||
<!-- ##### ARG GstWinEnc:avi_header ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstWinEnc:bitrate ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstWinEnc:quality ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstWinEnc:compression ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstWinEnc:last_frame_size ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ GstMedian
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstMedian:active ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstMedian:filtersize ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ Mp3Parse
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Mp3Parse:skip ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ Mpeg1Parse
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Mpeg1Parse:mux_rate ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ Mpeg2Parse
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Mpeg2Parse:mux_rate ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,8 +14,3 @@ Mpeg2Subt
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Mpeg2Subt:skip ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,18 +14,3 @@ GstSmooth
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSmooth:active ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSmooth:tolerance ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSmooth:filtersize ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,18 +14,3 @@ GstSmoothWave
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSmoothWave:width ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSmoothWave:height ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSmoothWave:widget ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ GstStereo
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstStereo:active ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstStereo:stereo ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,18 +14,3 @@ GstSynaesthesia
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSynaesthesia:width ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSynaesthesia:height ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstSynaesthesia:widget ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ System_Encode
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG System_Encode:video ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG System_Encode:audio ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ Videoscale
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Videoscale:width ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG Videoscale:height ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,42 +14,3 @@ GstVideoSink
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### SIGNAL GstVideoSink::frame-displayed ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
@gstvideosink: the object which received the signal.
|
||||
<!-- # Unused Parameters # -->
|
||||
@arg1:
|
||||
|
||||
<!-- ##### ARG GstVideoSink:width ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVideoSink:height ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVideoSink:widget ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVideoSink:frames_displayed ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVideoSink:frame_time ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVideoSink:xv_enabled ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ GstVolume
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVolume:active ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVolume:volume ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
|
@ -14,33 +14,3 @@ GstVuMeter
|
|||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVuMeter:volume ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVuMeter:volumeptr ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVuMeter:volume_left ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVuMeter:volumeptr_left ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVuMeter:volume_right ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GstVuMeter:volumeptr_right ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
|
36
docs/random/NOTES-0.1.1
Normal file
36
docs/random/NOTES-0.1.1
Normal file
|
@ -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
|
||||
|
1132
docs/random/caps.dia
Normal file
1132
docs/random/caps.dia
Normal file
File diff suppressed because it is too large
Load diff
345
docs/random/wtay/caps-negociation
Normal file
345
docs/random/wtay/caps-negociation
Normal file
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
SUBDIRS = autoplug \
|
||||
helloworld helloworld2 \
|
||||
queue queue2 queue3 queue4 \
|
||||
launch thread xml plugins
|
||||
launch thread xml plugins typefind
|
||||
|
|
|
@ -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,6 +87,7 @@ static GstPadFactory src_factory = {
|
|||
};
|
||||
|
||||
|
||||
/* 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);
|
||||
|
||||
|
@ -73,11 +96,26 @@ 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);
|
||||
|
||||
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();
|
||||
|
||||
/* 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);
|
||||
|
||||
/* 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.
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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 = \
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
|
||||
GstElementDetails gst_disksrc_details = {
|
||||
"asynchronous Disk Source",
|
||||
"Disk Source",
|
||||
"Source/File",
|
||||
"Read from arbitrary point in a file",
|
||||
VERSION,
|
||||
|
|
|
@ -50,7 +50,6 @@ 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 },
|
||||
|
|
60
gst/gst.c
60
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<GST_CAT_MAX_CATEGORY; i++) {
|
||||
g_print (" 0x%08x %s %s\n", 1<<i,
|
||||
g_print (" 0x%08x %s%s %s\n", 1<<i,
|
||||
(gst_info_get_categories() & (1<<i)?"(enabled)":" "),
|
||||
(gst_debug_get_categories() & (1<<i)?"/(enabled)":"/ "),
|
||||
gst_get_category_name (i));
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue