Merged HEAD from BRANCH-INCSCHED1-200104161 into BRANCH-INCSCHED1.

Original commit message from CVS:
Merged HEAD from BRANCH-INCSCHED1-200104161 into BRANCH-INCSCHED1.
This commit is contained in:
Erik Walthinsen 2001-04-16 21:43:28 +00:00
parent 395527b2f2
commit e6a59c8a62
334 changed files with 23247 additions and 15673 deletions

13
AUTHORS
View file

@ -1,5 +1,16 @@
Erik Walthinsen <omega@cse.ogi.edu>
Matt Howell <mhowell@users.sourceforge.net>
Brent Bradburn <bbradburn@users.sourceforge.net>
Wim Taymans <wim.taymans@tvd.be>
Richard Boulton <richard@tartarus.org>
Chris Emerson (PPC port)
Zaheer Merali <zaheer@grid9.net> (thread synchronization rework)
David I. Lehn <dlehn@users.sourceforge.net>
- debian packaging
- various fixes
Chris Emerson <chris@tartarus.org>
- PPC port
- small libxml patches
Jens Thiele <karme@unforgettable.com>
- color conversion patches
Thomas Nyberg <thomas@codefactory.se>
- gstreamer.m4 macros

View file

@ -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 testsuite 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 testsuite examples gstplay editor docs debian
bin_SCRIPTS = gstreamer-config
@ -22,8 +29,10 @@ m4data_DATA = gstreamer.m4
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gstreamer.pc
man_MANS = gstreamer-config.1
EXTRA_DIST = gstreamer.spec.in gstreamer-config.in gstreamer.m4 gstreamer.pc.in \
LICENSE REQUIREMENTS ABOUT-NLS
LICENSE REQUIREMENTS ABOUT-NLS $(man_MANS)
dist-hook:
cp gstreamer.spec $(distdir)

View file

@ -9,7 +9,10 @@ Required libraries:
===================
glib v1.2.0 or better
gtk+ v1.2.0 or better
libxml
libxml (also called gnome-xml, available from http://xmlsoft.org/)
These libraries are all central parts of gnome, and are available from the
ftp.gnome.org or its mirrors, amongst other places.
Optional libraries:
===================
@ -24,6 +27,8 @@ libvorbis (for vorbisenc, vorbisdec)
libcdparanoia (for cdparanoia ripper)
liblame (for lame mp3 encoder)
libshout (for the shoutcast plugin)
libasound (for the alsa src/sink plugin)
librtp (for the rtp sink plugin)
for AVI playback you might want to get the windows libraries from
http://divx.euro.ru/ and put the .dll files in /usr/lib/win32/

View file

@ -19,16 +19,23 @@
#undef HAVE_CPU_PPC
#undef HAVE_CPU_ALPHA
#undef HAVE_CPU_ARM
#undef HAVE_CPU_SPARC
#undef HAVE_GDK_PIXBUF
#undef HAVE_LIBGHTTP
#undef HAVE_LIBMMX
#undef HAVE_LIBXV
#undef HAVE_OSS
#undef HAVE_XAUDIO
#undef HAVE_CSSAUTH
#undef HAVE_VORBIS
#undef HAVE_LIBMAD
#undef HAVE_LIBJPEG
#undef HAVE_LIBHERMES
#undef HAVE_NASM
#undef HAVE_MPEG2DEC
#undef HAVE_LINUX_CDROM
#undef HAVE_LINUX_VIDEODEV
#undef HAVE_ATOMIC_H

View file

@ -7,6 +7,7 @@ INCLUDES = -I$(top_srcdir)/gst \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-DDATADIR=\""$(datadir)"\" \
-I$(includedir) \
$(shell gnome-config --cflags gnome gnomeui bonobo bonobox) \
$(BONOBOX_TEST_CFLAGS) -Wall -O2
bin_PROGRAMS = bonobo-gstmediaplay
@ -15,15 +16,16 @@ bonobo_gstmediaplay_SOURCES = \
bonobo-gstmediaplay.c
bonobo_gstmediaplay_CFLAGS = -Wall -O2 \
$(shell gnome-config --cflags gnomeui bonobo bonobox) $(shell libglade-config --cflags gnome) \
$(shell gnome-config --cflags gnome gnomeui bonobo bonobox) $(shell libglade-config --cflags gnome) \
$(shell gstreamer-config --clfags )
bonobo_gstmediaplay_LDADD = \
$(top_srcdir)/gstplay/libgstmediaplay.la
$(top_srcdir)/gstplay/libgstmediaplay.la \
$(top_srcdir)/gst/libgst.la
bonobo_gstmediaplay_LDFLAGS = \
$(shell gnome-config --libs gnomeui bonobo bonobox) $(shell libglade-config --libs gnome) \
$(shell gstreamer-config --libs )
$(shell gnome-config --libs gnome gnomeui bonobo bonobox) $(shell libglade-config --libs gnome) \
$(shell gstreamer-config --libs )
oafdir = $(datadir)/oaf
OAF_FILES = gstmediaplay.oafinfo

View file

@ -307,12 +307,16 @@ bonobo_gstmediaplay_factory (BonoboGenericFactory *this, void *data)
control_data->play = gst_play_new ();
vbox = gtk_vbox_new (TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (control_data->play),
TRUE, TRUE, 0);
gtk_widget_show_all (vbox);
gst_play_set_uri (control_data->play, "/opt/data/armageddon1.mpg");
gst_play_play (control_data->play);
/*
* Create the BonoboControl object.
*/
@ -403,6 +407,7 @@ init_server_factory (int argc, char **argv)
int
main (int argc, char **argv)
{
//g_thread_init (NULL);
/*
* Setup the factory.
*/

View file

@ -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 ##############################
@ -121,6 +124,8 @@ case "x${target_cpu}" in
AC_DEFINE(HAVE_CPU_ALPHA) ;;
xarm*) HAVE_CPU_ARM=yes ;
AC_DEFINE(HAVE_CPU_ARM) ;;
xsparc*) HAVE_CPU_SPARC=yes ;
AC_DEFINE(HAVE_CPU_SPARC) ;;
esac
dnl Determine endianness
@ -156,16 +161,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
@ -175,10 +180,13 @@ if test x$XML_CONFIG = xno; then
fi
XML_LIBS=`xml-config --libs`
XML_CFLAGS=`xml-config --cflags`
AC_CHECK_LIB(xml, xmlDocGetRootElement, ,
[ AC_MSG_ERROR(Need version 1.8.1 or better of libxml) ],
$XML_LIBS)
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:
@ -186,7 +194,44 @@ dnl =======================================
dnl Check for libesd
esd_save_LIBS=$LIBS
esd_save_CFLAGS=$CFLAGS
AM_PATH_ESD(0.2.12, HAVE_LIBESD=yes, HAVE_LIBESD=no)
LIBS=$esd_save_LIBS
CFLAGS=$esd_save_CFLAGS
AC_ARG_ENABLE(esdsink,
[ --enable-esdsink enable the building of the esdsink],
[case "${enableval}" in
yes) : ;;
no) HAVE_LIBESD=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-esdsink) ;;
esac],
[HAVE_LIBESD=$HAVE_LIBESD])
dnl Check for artsc
AC_PATH_PROG(ARTSC_CONFIG, artsc-config, no)
if test x$ARTSC_CONFIG = xno; then
AC_MSG_WARN(Couldn't find artsc-config)
ARTSC_LIBS=
ARTSC_CFLAGS=
HAVE_ARTSC=no
else
ARTSC_LIBS=`artsc-config --libs`
ARTSC_CFLAGS=`artsc-config --cflags`
HAVE_ARTSC=yes
fi
AC_SUBST(ARTSC_LIBS)
AC_SUBST(ARTSC_CFLAGS)
AC_ARG_ENABLE(artsd,
[ --enable-artsd enable the building of artsd plugins],
[case "${enableval}" in
yes) : ;;
no) HAVE_ARTSC=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-artsd) ;;
esac],
[:])
dnl AM_PATH_XMMS(0.1.0, HAVE_LIBXMMS=yes, HAVE_LIBXMMS=no)
dnl Check for libasound
alsa_save_LIBS=$LIBS
@ -194,6 +239,14 @@ alsa_save_CFLAGS=$CFLAGS
AM_PATH_ALSA(0.5.0, HAVE_LIBASOUND=yes, HAVE_LIBASOUND=no)
LIBS=$alsa_save_LIBS
CFLAGS=$alsa_save_CFLAGS
AC_ARG_ENABLE(alsasink,
[ --enable-alsasink enable the building of the alsasink],
[case "${enableval}" in
yes) HAVE_LIBASOUND=$HAVE_LIBASOUND ;;
no) HAVE_LIBASOUND=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-alsasink) ;;
esac],
[HAVE_LIBASOUND=$HAVE_LIBASOUND])
dnl Check for libgdk-pixbuf
AC_PATH_PROG(GDK_PIXBUF_CONFIG, gdk-pixbuf-config, no)
@ -211,6 +264,24 @@ AC_SUBST(GDK_PIXBUF_LIBS)
AC_SUBST(GDK_PIXBUF_CFLAGS)
dnl Check for libgnome
AC_PATH_PROG(GNOME_CONFIG, gnome-config, no)
if test x$GNOME_CONFIG = xno; then
AC_MSG_WARN(Couldn't find gnome-config: can't build editor or gstplay)
GNOME_LIBS=
GNOME_CFLAGS=
HAVE_GNOME=no
else
GNOME_LIBS=`gnome-config --libs gnome gnomeui`
GNOME_CFLAGS=`gnome-config --cflags gnome gnomeui`
GHTTP_LIBS=`gnome-config --libs gnome gnomeui`
GHTTP_CFLAGS=`gnome-config --cflags gnome gnomeui`
HAVE_GNOME=yes
fi
AC_SUBST(GNOME_LIBS)
AC_SUBST(GNOME_CFLAGS)
AC_SUBST(GHTTP_LIBS)
dnl Check for libghttp
dnl FIXME: need to check for header
AC_CHECK_LIB(ghttp, ghttp_request_new,
@ -224,26 +295,8 @@ AC_CHECK_LIB(ghttp, ghttp_request_new,
HAVE_LIBGHTTP=no
],
$LIBS)
AC_SUBST(GHTTP_LIBS)
AC_SUBST(GST_HTTPSRC_GET_TYPE)
dnl Check for libgnome
AC_PATH_PROG(GNOME_CONFIG, gnome-config, no)
if test x$GNOME_CONFIG = xno; then
AC_MSG_WARN(Couldn't find gnome-config: can't build editor or gstplay)
GNOME_LIBS=
GNOME_CFLAGS=
HAVE_GNOME=no
else
GNOME_LIBS=`gnome-config --libs gnome gnomeui`
GNOME_CFLAGS=`gnome-config --cflags gnome gnomeui`
HAVE_GNOME=yes
fi
AC_SUBST(GNOME_LIBS)
AC_SUBST(GNOME_CFLAGS)
dnl Check for libglade
HAVE_LIBGLADE_GNOME="no"
AC_PATH_PROG(LIBGLADE_CONFIG_PATH, libglade-config, no)
@ -251,19 +304,17 @@ if test x$LIBGLADE_CONFIG_PATH = xno; then
AC_MSG_WARN(Couldn't find libglade-config - Can't build gstplay)
LIBGLADE_GNOME_LIBS=
LIBGLADE_GNOME_CFLAGS=
HAVE_LIBGLADE_GNOME=NO
else
LIBGLADE_GNOME_LIBS=`libglade-config --libs gnome`
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"
HAVE_LIBGLADE_GNOME="no"
CFLAGS="$CFLAGS $LIBGLADE_GNOME_CFLAGS $GTK_CFLAGS"
LIBS="$LIBS $LIBGLADE_GNOME_LIBS $GTK_LIBS"
AC_TRY_LINK([#include <glade/glade.h>],[glade_gnome_init();],
HAVE_LIBGLADE_GNOME="yes",
AC_MSG_WARN(
[Couldn't find gnome libraries for libglade - Can't build gstplay])
[Couldn't find gnome libraries for libglade - Can't build gstmediaplay and gsteditor])
)
CFLAGS="$libglade_save_CFLAGS"
LIBS="$libglade_save_LIBS"
@ -314,13 +365,24 @@ AC_DEFINE(HAVE_LIBXV),
HAVE_LIBXV=no, $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
LIBS=${xvsave_LIBS}
dnl Check for OSS audio
AC_CHECK_HEADER(sys/soundcard.h,
AC_DEFINE(HAVE_OSS)
HAVE_OSS=yes, []
)
dnl Check for xaudio
AC_CHECK_HEADER(xaudio/decoder.h,[
AC_CHECK_HEADER(xaudio/decoder.h,
AC_DEFINE(HAVE_XAUDIO)
HAVE_XAUDIO="yes", []
])
)
dnl Check for libvorbis
AC_MSG_CHECKING(MAD library)
AC_CHECK_LIB(mad, mad_decoder_finish,
HAVE_LIBMAD=yes
AC_DEFINE(HAVE_LIBMAD),
HAVE_LIBMAD=no, )
dnl Check for libvorbis
AC_MSG_CHECKING(Vorbis library)
@ -336,6 +398,12 @@ HAVE_LIBJPEG=yes
AC_DEFINE(HAVE_LIBJPEG),
HAVE_LIBJPEG=no, )
dnl Check for libvorbis
AC_MSG_CHECKING(Hermes library)
AC_CHECK_LIB(Hermes, Hermes_ConverterInstance,
HAVE_LIBHERMES=yes
AC_DEFINE(HAVE_LIBHERMES),
HAVE_LIBHERMES=no, )
dnl Check for cdparanoia
AC_MSG_CHECKING(CDparanoia library)
@ -348,13 +416,22 @@ 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)
AC_CHECK_LIB(shout, shout_init_connection, HAVE_LIBSHOUT=yes, HAVE_LIBSHOUT=no, )
AC_CHECK_HEADER(shout/shout.h, :, HAVE_LIBSHOUT=no)
dnl Check for mpeg2dec
AC_MSG_CHECKING(mpeg2dec library)
AC_CHECK_LIB(mpeg2, mpeg2_init, HAVE_MPEG2DEC=yes, HAVE_MPEG2DEC=no, )
AC_CHECK_HEADER(mpeg2dec/mpeg2.h, :, HAVE_MPEG2DEC=no)
dnl Check for librtp
AC_MSG_CHECKING(rtp library)
AC_CHECK_LIB(rtp, rtp_packet_new_take_data, HAVE_LIBRTP=yes, HAVE_LIBRTP=no, $GLIB_LIBS $GLIB_CFLAGS)
dnl check if css-auth.c exists (FIXME)
AC_MSG_CHECKING(DVD CSS code)
@ -368,6 +445,17 @@ else
HAVE_CSSAUTH="no"
fi
dnl Check for linux/cdrom.h
AC_CHECK_HEADER(linux/cdrom.h,
AC_DEFINE(HAVE_LINUX_CDROM)
HAVE_LINUX_CDROM=yes, []
)
dnl Check for linux/videodev.h
AC_CHECK_HEADER(linux/videodev.h,
AC_DEFINE(HAVE_LINUX_VIDEODEV)
HAVE_LINUX_VIDEODEV=yes, []
)
dnl ######################################################################
@ -487,6 +575,27 @@ AC_ARG_WITH(win32_libdir,
esac],
[:]) dnl Default value
AC_ARG_ENABLE(docs-build,
[ --disable-docs-build disable all building of 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=yes]) dnl Default value
AC_ARG_ENABLE(plugin-docs,
[ --enable-plugin-docs enable the building of plugin documentation
(this is currently broken, so off by default)],
[case "${enableval}" in
yes) BUILD_PLUGIN_DOCS=yes ;;
no) BUILD_PLUGIN_DOCS=no ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-plugin-docs) ;;
esac],
[BUILD_PLUGIN_DOCS=no]) dnl Default value
dnl ################################################
dnl # Set defines according to variables set above #
@ -551,19 +660,27 @@ AM_CONDITIONAL(HAVE_CPU_I386, test "x$HAVE_CPU_I386" = "xyes")
AM_CONDITIONAL(HAVE_CPU_PPC, test "x$HAVE_CPU_PPC" = "xyes")
AM_CONDITIONAL(HAVE_CPU_ALPHA, test "x$HAVE_CPU_ALPHA" = "xyes")
AM_CONDITIONAL(HAVE_CPU_ARM, test "x$HAVE_CPU_ARM" = "xyes")
AM_CONDITIONAL(HAVE_CPU_SPARC, test "x$HAVE_CPU_SPARC" = "xyes")
AM_CONDITIONAL(HAVE_GDK_PIXBUF, test "x$USE_GDK_PIXBUF" = "xyes")
AM_CONDITIONAL(HAVE_LIBGHTTP, test "x$USE_LIBGHTTP" = "xyes")
AM_CONDITIONAL(HAVE_LIBMMX, test "x$USE_LIBMMX" = "xyes")
AM_CONDITIONAL(HAVE_ATOMIC_H, test "x$USE_ATOMIC_H" = "xyes")
AM_CONDITIONAL(HAVE_OSS, test "x$HAVE_OSS" = "xyes")
AM_CONDITIONAL(HAVE_XAUDIO, test "x$HAVE_XAUDIO" = "xyes")
AM_CONDITIONAL(HAVE_LIBMAD, test "x$HAVE_LIBMAD" = "xyes")
AM_CONDITIONAL(HAVE_LINUX_CDROM, test "x$HAVE_LINUX_CDROM" = "xyes")
AM_CONDITIONAL(HAVE_LINUX_VIDEODEV, test "x$HAVE_LINUX_VIDEODEV" = "xyes")
AM_CONDITIONAL(HAVE_CSSAUTH, test "x$HAVE_CSSAUTH" = "xyes")
AM_CONDITIONAL(HAVE_VORBIS, test "x$HAVE_VORBIS" = "xyes")
AM_CONDITIONAL(HAVE_LIBJPEG, test "x$HAVE_LIBJPEG" = "xyes")
AM_CONDITIONAL(HAVE_LIBHERMES, test "x$HAVE_LIBHERMES" = "xyes")
AM_CONDITIONAL(HAVE_NASM, test "x$HAVE_NASM" = "xyes")
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(BUILD_PLUGIN_DOCS, test "x$BUILD_PLUGIN_DOCS" = "xyes")
AM_CONDITIONAL(HAVE_DB2HTML, $HAVE_DB2HTML)
AM_CONDITIONAL(HAVE_DB2PS, $HAVE_DB2PS)
AM_CONDITIONAL(HAVE_PS2PDF, $HAVE_PS2PDF)
@ -573,7 +690,11 @@ AM_CONDITIONAL(HAVE_CDPARANOIA, test "x$HAVE_CDPARANOIA" = "xyes")
AM_CONDITIONAL(HAVE_LIBLAME, test "x$HAVE_LIBLAME" = "xyes")
AM_CONDITIONAL(HAVE_LIBSHOUT, test "x$HAVE_LIBSHOUT" = "xyes")
AM_CONDITIONAL(HAVE_LIBESD, test "x$HAVE_LIBESD" = "xyes")
AM_CONDITIONAL(HAVE_ARTSC, test "x$HAVE_ARTSC" = "xyes")
AM_CONDITIONAL(HAVE_LIBASOUND, test "x$HAVE_LIBASOUND" = "xyes")
AM_CONDITIONAL(HAVE_MPEG2DEC, test "x$HAVE_MPEG2DEC" = "xyes")
AM_CONDITIONAL(HAVE_LIBXMMS, test "x$HAVE_LIBXMMS" = "xyes")
AM_CONDITIONAL(HAVE_LIBRTP, test "x$HAVE_LIBRTP" = "xyes")
@ -609,7 +730,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,14 +772,13 @@ dnl # Make the output files #
dnl #########################
AC_OUTPUT([Makefile
intl/Makefile
po/Makefile.in
include/Makefile
include/wine/Makefile
gst/Makefile
gst/types/Makefile
gst/meta/Makefile
gst/elements/Makefile
gst/autoplug/Makefile
libs/Makefile
libs/riff/Makefile
libs/colorspace/Makefile
@ -665,15 +788,18 @@ libs/putbits/Makefile
libs/winloader/Makefile
libs/idct/Makefile
plugins/Makefile
plugins/alsa/Makefile
plugins/au/Makefile
plugins/wav/Makefile
plugins/audioscale/Makefile
plugins/avi/Makefile
plugins/avi/wincodec/Makefile
plugins/flx/Makefile
plugins/jpeg/Makefile
plugins/mp3decode/Makefile
plugins/mp3decode/types/Makefile
plugins/mp3decode/xa/Makefile
plugins/mp3decode/mpg123/Makefile
plugins/mp3decode/mad/Makefile
plugins/mp3decode/parse/Makefile
plugins/mp3encode/Makefile
plugins/mp3encode/lame/Makefile
@ -696,10 +822,19 @@ plugins/mpeg1/system_encode/Makefile
plugins/mpeg1/mpeg1encoder/Makefile
plugins/mpeg1video/Makefile
plugins/mpeg1video/parse/Makefile
plugins/oss/Makefile
plugins/rtp/Makefile
plugins/rtp/rtpsend/Makefile
plugins/mulaw/Makefile
plugins/alaw/Makefile
plugins/filters/Makefile
plugins/filters/smooth/Makefile
plugins/filters/median/Makefile
plugins/filters/ladspa/Makefile
plugins/filters/stereo2mono/Makefile
plugins/filters/passthrough/Makefile
plugins/filters/colorspace/Makefile
plugins/filters/volenv/Makefile
plugins/icecast/Makefile
plugins/icecast/icecastsend/Makefile
plugins/effects/Makefile
@ -712,7 +847,8 @@ plugins/visualization/synaesthesia/Makefile
plugins/visualization/smoothwave/Makefile
plugins/videosink/Makefile
plugins/videoscale/Makefile
plugins/audioscale/Makefile
plugins/xvideosink/Makefile
plugins/wav/Makefile
plugins/dvdsrc/Makefile
plugins/vcdsrc/Makefile
plugins/rtjpeg/Makefile
@ -722,6 +858,9 @@ plugins/capture/v4l/Makefile
plugins/cdparanoia/Makefile
plugins/esd/Makefile
plugins/esd/esdsink/Makefile
plugins/artsd/Makefile
plugins/xmms/Makefile
plugins/mulaw/Makefile
gstplay/Makefile
dnl components/bonobo-gstmediaplay/Makefile
test/Makefile
@ -730,6 +869,9 @@ test/bindings/Makefile
tests/Makefile
tests/sched/Makefile
tests/eos/Makefile
testsuite/Makefile
testsuite/capsnego/Makefile
tests/nego/Makefile
examples/Makefile
examples/autoplug/Makefile
examples/helloworld/Makefile
@ -755,6 +897,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
View file

@ -0,0 +1,2 @@
*.debhelper
*substvars

40
debian/Makefile.am vendored Normal file
View file

@ -0,0 +1,40 @@
EXTRA_DIST = \
Makefile.am \
README.Debian \
changelog \
control \
copyright \
gsteditor.files \
gsteditor.manpages \
gsteditor.menu \
gstmediaplay.files \
gstmediaplay.manpages \
gstmediaplay.menu \
gstreamer-alsa.files \
gstreamer-cdparanoia.files \
gstreamer-common.files \
gstreamer-doc.files \
gstreamer-elements.files \
gstreamer-esd.files \
gstreamer-lame.files \
gstreamer-mpeg2dec.files \
gstreamer-mpg123.files \
gstreamer-plugin-template.postinst \
gstreamer-plugin-template.prerm \
gstreamer-runtime.files \
gstreamer-runtime.manpages \
gstreamer-runtime.postinst \
gstreamer-tools.files \
gstreamer-tools.manpages \
gstreamer-vorbis.files \
libgst-dev.files \
libgst-dev.manpages \
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
View 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

40
debian/changelog vendored Normal file
View file

@ -0,0 +1,40 @@
gstreamer (0.1.1.20010320-1) unstable; urgency=low
* Latest CVS code
* enable main docs
* disable broken plugin docs with new option
-- David I. Lehn <dlehn@vt.edu> Tue, 20 Mar 2001 18:15:19 -0500
gstreamer (0.1.1.20010315-1) unstable; urgency=low
* Latest CVS code
* Added man pages
* Split mpeg2dec to seperate plugin
* libgst Architectures updated to cothread supported archs
-- David I. Lehn <dlehn@vt.edu> Thu, 15 Mar 2001 20:17:19 -0500
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:

157
debian/control vendored Normal file
View file

@ -0,0 +1,157 @@
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: [alpha arm i386 powerpc sparc]
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-alsa
Architecture: any
Section: libs
Depends: ${shlibs:Depends}, gstreamer-runtime
Description: ALSA plugin for GStreamer
ALSA plugin for GStreamer
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-mpeg2dec
Architecture: any
Section: libs
Depends: ${shlibs:Depends}, gstreamer-runtime
Description: mpeg2dec plugin for GStreamer
mpeg2dec 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
View 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
View file

@ -0,0 +1,2 @@
usr/bin/gsteditor
usr/share/gsteditor

1
debian/gsteditor.manpages vendored Normal file
View file

@ -0,0 +1 @@
debian/gstreamer/usr/share/man/man1/gsteditor.1

5
debian/gsteditor.menu vendored Normal file
View 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
View file

@ -0,0 +1,2 @@
usr/bin/gstmediaplay
usr/share/gstmediaplay

1
debian/gstmediaplay.manpages vendored Normal file
View file

@ -0,0 +1 @@
debian/gstreamer/usr/share/man/man1/gstmediaplay.1

5
debian/gstmediaplay.menu vendored Normal file
View file

@ -0,0 +1,5 @@
?package(gstmediaplay): \
needs=X11 \
section=Apps/Viewers \
title="GStreamer Media Player" \
command="/usr/bin/gstmediaplay"

2
debian/gstreamer-alsa.files vendored Normal file
View file

@ -0,0 +1,2 @@
usr/lib/gst/libalsasrc.*
usr/lib/gst/libalsasink.*

1
debian/gstreamer-cdparanoia.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/gst/libcdparanoia.*

47
debian/gstreamer-common.files vendored Normal file
View file

@ -0,0 +1,47 @@
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/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
View file

@ -0,0 +1 @@
usr/share/gstreamer

3
debian/gstreamer-elements.files vendored Normal file
View file

@ -0,0 +1,3 @@
usr/lib/gst/libgstelements.*
usr/lib/gst/libgststaticautoplug.*
usr/lib/gst/libgststaticautoplugrender.*

1
debian/gstreamer-esd.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/gst/libesdsink.*

1
debian/gstreamer-lame.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/gst/libgstlame.*

1
debian/gstreamer-mpeg2dec.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/gst/libmpeg2dec.*

1
debian/gstreamer-mpg123.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/gst/libmpg123.*

View 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
View 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
View file

@ -0,0 +1 @@
usr/bin/gstreamer-register

1
debian/gstreamer-runtime.manpages vendored Normal file
View file

@ -0,0 +1 @@
debian/gstreamer/usr/share/man/man1/gstreamer-register.1

47
debian/gstreamer-runtime.postinst vendored Normal file
View 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
View file

@ -0,0 +1,2 @@
usr/bin/gstreamer-inspect
usr/bin/gstreamer-launch

2
debian/gstreamer-tools.manpages vendored Normal file
View file

@ -0,0 +1,2 @@
debian/gstreamer/usr/share/man/man1/gstreamer-inspect.1
debian/gstreamer/usr/share/man/man1/gstreamer-launch.1

1
debian/gstreamer-vorbis.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/gst/libgstvorbis.*

6
debian/libgst-dev.files vendored Normal file
View 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/libgst-dev.manpages vendored Normal file
View file

@ -0,0 +1 @@
debian/gstreamer/usr/share/man/man1/gstreamer-config.1

1
debian/libgst0.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/libgst.so.*

47
debian/libgst0.postinst vendored Normal file
View 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
View file

@ -0,0 +1,2 @@
usr/lib/libgsteditor.la
usr/lib/libgsteditor.so

1
debian/libgsteditor0.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/libgsteditor.so.*

47
debian/libgsteditor0.postinst vendored Normal file
View 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
View file

@ -0,0 +1,2 @@
usr/lib/libgstmediaplay.la
usr/lib/libgstmediaplay.so

1
debian/libgstmediaplay0.files vendored Normal file
View file

@ -0,0 +1 @@
usr/lib/libgstmediaplay.so.*

47
debian/libgstmediaplay0.postinst vendored Normal file
View 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

147
debian/rules vendored Executable file
View file

@ -0,0 +1,147 @@
#!/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=3
# 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=alsa cdparanoia common elements esd lame mpeg2dec 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 \
--enable-docs-build \
--disable-plugin-docs
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_installman
# 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_installman
# 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

View file

@ -1,4 +1,11 @@
SUBDIRS = manual fwg gst libs
if BUILD_PLUGIN_DOCS
SUBDIRS_PLUGINS = plugins
else
SUBDIRS_PLUGINS =
endif
SUBDIRS = manual fwg gst libs $(SUBDIRS_PLUGINS)
EXTRA_DIST = random slides manuals.mak

View file

@ -4,11 +4,8 @@ htmlname = index.html
sgml_files = gst-plugin-writers-guide.sgml \
titlepage.sgml \
intro.sgml \
concepts.sgml \
firstplugin.sgml \
testapp.sgml \
loopbased.sgml \
typesnprops.sgml
loopbased.sgml
fig_files =
eps_files =

View file

@ -1,82 +0,0 @@
<chapter id="cha-plugins">
<title>Plugins</title>
<para>
Extensions to GStreamer can be made using a plugin mechanism. This is
used extensively in GStreamer even if only the standard package is
being used: a few very basic functions reside in the core library, and
all others are in a standard set of plugins.
</para>
<para>
Plugins are only loaded when needed: a plugin registry is used to
store the details of the plugins so that it is not neccessary to load
all plugins to determine which are needed.
This registry needs to be updated when a new plugin is added to the
system: see the <emphasis>gstreamer-register</emphasis> utility and the
documentation in the <emphasis>GStreamer Application Development
Manual</emphasis> for more details.
</para>
<para>
User extensions to GStreamer can be installed in the main plugin
directory, and will immediately be available for use in applications.
<emphasis>gstreamer-register</emphasis> should be run to update
the repository: but the system will work correctly even if it hasn't
been - it will just load the correct plugin faster.
</para>
<para>
User specific plugin directories and registries will be available in future
versions of GStreamer.
</para>
</chapter>
<chapter id="cha-elements">
<title>Elements</title>
<para>
Elements are at the core of GStreamer. Without elements, GStreamer is just
a bunch of pipe fittings with nothing to connect. A large number of
elements (filters, sources and sinks) ship with GStreamer, but extra
elements can also be written.
</para>
<para>
An element may be constructed in several different ways, but all must
conform to the same basic rules. A simple filter may be built with the
FilterFactory, where the only code that need be written is the actual
filter code. A more complex filter, or a source or sink, will need to be
written out fully for complete access to the features and performance
possible with GStreamer.
</para>
<para>
The implementation of a new element will be contained in a plugin:
a single plugin may contain the implementation of several elements, or
just a single one.
</para>
</chapter>
<chapter id="cha-buffers">
<title>Buffers</title>
<para>
</para>
</chapter>
<chapter id="cha-scheduling">
<title>Scheduling</title>
<para>
</para>
</chapter>
<chapter id="cha-chainloop">
<title>Chain vs Loop Elements</title>
<para>
</para>
</chapter>
<chapter id="cha-typing">
<title>Typing and Properties</title>
<para>
</para>
</chapter>
<chapter id="cha-metadata">
<title>Metadata</title>
<para>
</para>
</chapter>

View file

@ -1,156 +0,0 @@
<chapter id="cha-boilerplate">
<title>Constructing the boilerplate</title>
<para>
The first thing to do when making a new element is to specify some basic
details about it: what its name is, who wrote it, what version number it
is, etc. We also need to define an object to represent the element and to
store the data the element needs. I shall refer to these details
collectively as the <emphasis>boilerplate</emphasis>.
</para>
<sect1 id="sect-boilerplate-gobject">
<title>Doing it the hard way with GstObject</title>
<para>
The standard way of defining the boilerplate is simply to write some
code, and fill in some structures. The easiest way to do this is to
copy an example and modify according to your needs.
</para>
<para>
First we will examine the code you would be likely to place in a header
file (although since the interface to the code is entirely defined
by the pluging system, and doesn't depend on reading a header file,
this is not crucial.)
The code here can be found in
<filename>examples/plugins/example.h</filename>
</para>
<programlisting>
/* Definition of structure storing data for this element. */
typedef struct _GstExample GstExample;
struct _GstExample {
GstElement element;
GstPad *sinkpad,*srcpad;
gint8 active;
};
/* Standard definition defining a class for this element. */
typedef struct _GstExampleClass GstExampleClass;
struct _GstExampleClass {
GstElementClass parent_class;
};
/* Standard macros for defining types for this element. */
#define GST_TYPE_EXAMPLE \
(gst_example_get_type())
#define GST_EXAMPLE(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_EXAMPLE,GstExample))
#define GST_EXAMPLE_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample))
#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. */
GtkType gst_example_get_type(void);
</programlisting>
</sect1>
<sect1 id="sect-boilerplate-filterfactory">
<title>Doing it the easy way with FilterFactory</title>
<para>
A plan for the future is to create a FilterFactory, to make the
process of making a new filter a simple process of specifying a few
details, and writing a small amount of code to perform the actual
data processing.
</para>
<para>
Unfortunately, this hasn't yet been implemented. It is also likely
that when it is, it will not be possible to cover all the possibilities
available by writing the boilerplate yourself, so some plugins will
always need to be manually registered.
</para>
<para>
As a rough outline of what is planned: the FilterFactory will take a
list of appropriate function pointers, and data structures to define
a filter. With a reasonable measure of preprocessor magic, the
plugin writer will then simply need to provide definitions of the
functions and data structures desired, and a name for the filter, and
then call a macro from within plugin_init() which will register the
new filter. All the fluff that goes into the definition of a filter
will thus be hidden from view.
</para>
<para>
Ideally, we will come up with a way for various FilterFactory-provided
functions to be overridden, to the point where you can construct
almost the most complex stuff with it, it just saves typing.
</para>
<para>
Of course, the filter factory can be used to create sources and sinks
too: simply create a filter with only source or sink pads.
</para>
<para>
You may be thinking that this should really be called an
ElementFactory. Well, we agree, but there is already something else
justifiably ealled an ElementFactory (this is the thing which actually
makes instances of elements). There is also already something called
a PluginFactory. We just have too many factories and not enough words.
And since this isn't yet written, it doesn't get priority for claiming
a name.
</para>
</sect1>
</chapter>
<chapter id="cha-idfilter">
<title>An identity filter</title>
<para>
</para>
<sect1 id="sect-idfilter-pads">
<title>Building an object with pads</title>
<para>
</para>
</sect1>
<sect1 id="sect-idfilter-fns">
<title>Attaching functions</title>
<para>
</para>
</sect1>
<sect1 id="sect-idfilter-fns">
<title>The chain function</title>
<para>
</para>
</sect1>
</chapter>
<chapter id="cha-plugininit">
<title>The plugin_init function</title>
<para>
</para>
<sect1 id="sect-plugininit-types">
<title>Registering the types</title>
<para>
</para>
</sect1>
<sect1 id="sect-plugininit-filter">
<title>Registering the filter</title>
<para>
</para>
</sect1>
<sect1 id="sect-plugininit-multiple">
<title>Having multiple filters in a single plugin</title>
<para>
</para>
</sect1>
</chapter>

View file

@ -3,16 +3,10 @@
<!ENTITY INTRO SYSTEM "intro.sgml">
<!ENTITY CONCEPTS SYSTEM "concepts.sgml">
<!ENTITY FIRSTPLUGIN SYSTEM "firstplugin.sgml">
<!ENTITY TESTAPP SYSTEM "testapp.sgml">
<!ENTITY LOOPBASED SYSTEM "loopbased.sgml">
<!ENTITY TYPESNPROPS SYSTEM "typesnprops.sgml">
<!ENTITY BUFFERS SYSTEM ".sgml">
<!ENTITY SRCNSINK SYSTEM ".sgml">
@ -20,6 +14,8 @@
<!ENTITY STATEMANAGE SYSTEM ".sgml">
<!ENTITY CHECKLIST SYSTEM ".sgml">
<!ENTITY GStreamer "<application>GStreamer</application>">
]>
<book id="index">
@ -30,22 +26,22 @@
<part id="introduction"><title>Introduction</title>
<partintro>
<para>
<application>GStreamer</application> is a framework for creating
&GStreamer; is a framework for creating
streaming media applications. It is extremely powerful and versatile,
and this versatility stems in part from its modularity, and its ability
to incorporate new modules seamlessly into its framework.
This document describes how to extend the capabilities of
<application>GStreamer</application> by creating new plugins.
&GStreamer; by creating new plugins.
</para>
<para>
It first describes the concepts required and the ways in which
<application>GStreamer</application> can be extended. It then goes
&GStreamer; can be extended. It then goes
through a worked example of how to write a simple filter (for data
processing), and how to test and debug it. More advanced concepts are
then introduced, with worked examples of each. Next, writing source
and sink elements (for performing input and output) is discussed.
Finally, checklists of things to be sure to do when extending
<application>GStreamer</application> are presented.
&GStreamer; are presented.
</para>
</partintro>
@ -59,12 +55,361 @@
<para>
This section introduces the basic concepts required to understand the
issues involved in extending <application>GStreamer</application>
issues involved in extending &GStreamer;
</para>
<para>
Many of these concepts are explained in greater detail in the
GStreamer Application Development Manual, and are merely mentioned
here to refresh your memory.
</para>
</partintro>
&CONCEPTS;
<chapter id="cha-plugins">
<title>Plugins</title>
<para>
Extensions to &GStreamer; can be made using a plugin mechanism. This is
used extensively in &GStreamer; even if only the standard package is
being used: a few very basic functions reside in the core library, and
all others are implemented in plugins.
</para>
<para>
Plugins are only loaded when needed: a plugin registry is used to
store the details of the plugins so that it is not neccessary to load
all plugins to determine which are needed.
This registry needs to be updated whenever a new plugin is added to the
system: see the <emphasis>gstreamer-register</emphasis> utility and the
documentation in the <emphasis>GStreamer Application Development
Manual</emphasis> for more details.
</para>
<para>
User extensions to &GStreamer; can be installed in the main plugin
directory, and will immediately be available for use in applications.
<emphasis>gstreamer-register</emphasis> should be run to update
the repository: but the system should work correctly even if it hasn't
been - it will just take longer to load the correct plugin.
</para>
<para>
User specific plugin directories and registries will be available
in future versions of &GStreamer;.
</para>
</chapter>
<chapter id="cha-elements">
<title>Elements</title>
<para>
Elements are at the core of &GStreamer;. Without elements, &GStreamer;
is just
a bunch of pipe fittings with nothing to connect. A large number of
elements (filters, sources and sinks) ship with &GStreamer;, but extra
elements can also be written.
</para>
<para>
An element may be constructed in several different ways, but all must
conform to the same basic rules. A simple filter may be built with the
FilterFactory, where the only code that need be written is the actual
filter code. A more complex filter, or a source or sink, will need to
be written out fully for complete access to the features and
performance possible with &GStreamer;.
</para>
<para>
The implementation of a new element will be contained in a plugin:
a single plugin may contain the implementation of several elements, or
just a single one.
</para>
</chapter>
<chapter id="cha-buffers">
<title>Buffers</title>
<para>
Buffers are structures used to pass data between elements. All streams
of data are chopped up into chunks which are stored in buffers.
Buffers can be of any size, and also contain metadata indicating the
type of data contained in them. Buffers can be allocated by various
different schemes, and may either be passed on by elements or
unreferenced (and the memory used by the buffer freed).
</para>
</chapter>
<chapter id="cha-typing">
<title>Typing and Properties</title>
<para>
A type system is used to ensure that the data passed between elements
is in a recognised format, and that the various parameters required
to fully specify that format match up correctly. Each connection
that is made between elements has a specified type. This is related,
but different, to the metadata in buffers which describes the type
of data in that particular buffer. See later in this document for
details of the available types.
</para>
</chapter>
<chapter id="cha-metadata">
<title>Metadata</title>
<para>
</para>
</chapter>
<chapter id="cha-scheduling">
<title>Scheduling</title>
<para>
</para>
</chapter>
<chapter id="cha-chainloop">
<title>Chain vs Loop Elements</title>
<para>
</para>
</chapter>
<chapter id="cha-autopluggers">
<title>Autopluggers</title>
<para>
&GStreamer; has an autoplugging mechanism, which enables application
writers to simply specify start and end elements for a path, and
the system will then create a path which links these elements,
in accordance with the type information provided by the elements.
</para>
<para>
It is possible to devise many different schemes for generating such
pathways, perhaps to optimise based on special criteria, or with
some specific constraints. It is thus possible to define new
autoplugging systems, using the plugin system.
</para>
</chapter>
</part>
<!-- ############ part ############# -->
<part id="typesnprops"><title>Types and Properties</title>
<partintro>
<para>
There is a very large set of possible types that may be used to
pass data between elements. Indeed, each new element that is defined
may use a new data format (though unless at least one other element
recognises that format, it will be most likely be useless since
nothing will be able to link with it).
</para>
<para>
In order for types to be useful, and for systems like autopluggers to
work, it is neccessary that all elements
agree on the type definitions, and which properties are required
for each type. The &GStreamer; framework itself
simply provides the ability to define types and parameters, but does
not fix the meaning of types and parameters, and does not enforce
standards on the creation of new types. This is a matter for
a policy to decide, not technical systems to enforce.
</para>
<para>
For now, the policy is simple:
<itemizedlist>
<listitem>
<para>
Do not create a new type if you could use one which already
exists.
</para>
</listitem>
<listitem>
<para>
If creating a new type, discuss it first with the other
&GStreamer; developers, on at least one of: IRC, mailing lists,
the &GStreamer; wiki.
</para>
</listitem>
<listitem>
<para>
Try to ensure that the name for a new format is as unlikely to
conflict with anything else created already, and is not a more
generalised name than it should be. For example:
"audio/compressed" would be too generalised a name to represent
audio data compressed with an mp3 codec. Instead "audio/mp3"
might be an appropriate name, or "audio/compressed" could exist
and have a property indicating the type of compression used.
</para>
</listitem>
<listitem>
<para>
Ensure that, when you do create a new type, you specify it
clearly, and get it added to the list of known types so that
other developers can use the type correctly when writing their
elements.
</para>
</listitem>
</itemizedlist>
</para>
</partintro>
<chapter id="cha-basic-types">
<title>The basic types</title>
<para>
This is a list of the basic types used for buffers. For each type, we
give the name ("mime type") of the type, the list of properties which
are associated with the type, the meaning of each property, and the
purpose of the type.
</para>
<itemizedlist>
<listitem>
<para>
<emphasis>audio/raw</emphasis>
- Unstructured and uncompressed raw audio data.
</para><para>
<emphasis>law</emphasis>
- The law used to describe the data. This is an integer for which
there are three valid values: 0 for linear, 1 for
mu law, 2 for A law.
</para><para>
<emphasis>endianness</emphasis>
- The order of bytes in a sample. This is a boolean:
0 means little-endian (ie, bytes are least significant first),
1 means big-endian (ie, most significant byte first).
</para><para>
<emphasis>signed</emphasis>
- Whether the samples are signed or not. This is a boolean:
0 means unsigned, 1 means signed.
</para><para>
<emphasis>width</emphasis>
- The number of bits per sample. This is extremely likely to be
a multiple of 8, but as ever this is up to each element supporting
this format to specify.
</para><para>
<emphasis>depth</emphasis>
- The number of bits used per sample. This must be less than or
equal to the width: if less than the width, the low bits are
assumed to be the ones used. For example, width=32, depth=24
means that each sample is stored in a 32 bit word, but only the
low 24 bits are actually used.
</para><para>
<emphasis>rate</emphasis>
- The sample rate of the data, in samples per second.
</para><para>
<emphasis>channels</emphasis>
- The number of channels of audio data.
</para>
<para>
For example: 16 bit, unsigned, linear, monophonic, big-endian,
44100KHz audio would be represented by
"law=0,endianness=1,signed=0,width=16,depth=16,rate=44100,channels=1"
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
<emphasis>audio/mp3</emphasis>
- Audio data compressed using the mp3 encoding scheme.
</para><para>
<emphasis>framed</emphasis>
- This is a boolean. If true (1), each buffer contains exactly
one frame. If false (0), frames and buffers do not (necessarily)
match up. If the data is not framed, the values of some of the
properties will not be available, but others will be assumed to
be constant throughout the file, or may be found in other ways.
</para><para>
<emphasis>layer</emphasis>
- The compression scheme layer used to compress the data.
This is an integer, and can currently have the value 1, 2
or 3.
</para><para>
<emphasis>bitrate</emphasis>
- The bitrate, in kilobits per second.
For VBR (variable bitrate) mp3 data, this is the average bitrate.
</para><para>
<emphasis>channels</emphasis>
- The number of channels of audio data present. This could
theoretically be any integer greater than 0, but in practice will
be either 1 or 2.
</para><para>
<emphasis>joint-stereo</emphasis>
- Boolean. If true, channels must not be zero. If true, this
implies that stereo data is stored as a combined signal and
the difference between the signals, rather than as two entirely
separate signals.
</para><para>
There are many other properties relevant for
<emphasis>audio/mp3</emphasis> data: these may be added to this
specification at a later date.
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
<emphasis>audio/x-ogg</emphasis>
- Audio data compressed using the Ogg Vorbis encoding scheme.
There are currently no parameters defined for this type. FIXME.
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
<emphasis>video/raw</emphasis>
- Raw video data.
</para><para>
<emphasis>fourcc</emphasis>
- A FOURCC code identifying the format in which this data is
stored. FOURCC (Four Character Code) is a simple system to
allow unambiguous identification of a video datastream format.
See <ulink
url="http://www.webartz.com/fourcc/"
type="http">http://www.webartz.com/fourcc/</ulink>
</para><para>
<emphasis>width</emphasis>
- The number of pixels wide that each video frame is.
</para><para>
<emphasis>height</emphasis>
- The number of pixels high that each video frame is.
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
<emphasis>video/mpeg</emphasis>
- Video data compressed using an mpeg encoding scheme.
</para><para>
<emphasis>mpegversion</emphasis>
</para><para>
<emphasis>systemstream</emphasis>
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
<emphasis>video/avi</emphasis>
- Video data compressed using the AVI encoding scheme.
There are currently no parameters defined for this type. FIXME.
</para>
</listitem>
</itemizedlist>
</chapter>
<chapter id="cha-types-test">
<title>Building a simple format for testing</title>
<para>
</para>
</chapter>
<chapter id="cha-types-simplemime">
<title>A simple MIME type</title>
<para>
</para>
</chapter>
<chapter id="cha-types-props">
<title>Type properties</title>
<para>
</para>
</chapter>
<chapter id="cha-types-typefind">
<title>Typefind functions and autoplugging</title>
<para>
</para>
</chapter>
</part>
@ -86,7 +431,296 @@
</para>
</partintro>
&FIRSTPLUGIN;
<chapter id="cha-boilerplate">
<title>Constructing the boilerplate</title>
<para>
The first thing to do when making a new element is to specify some basic
details about it: what its name is, who wrote it, what version number it
is, etc. We also need to define an object to represent the element and to
store the data the element needs. I shall refer to these details
collectively as the <emphasis>boilerplate</emphasis>.
</para>
<sect1 id="sect-boilerplate-gobject">
<title>Doing it the hard way with GstObject</title>
<para>
The standard way of defining the boilerplate is simply to write some
code, and fill in some structures. The easiest way to do this is to
copy an example and modify according to your needs.
</para>
<para>
First we will examine the code you would be likely to place in a header
file (although since the interface to the code is entirely defined
by the pluging system, and doesn't depend on reading a header file,
this is not crucial.)
The code here can be found in
<filename>examples/plugins/example.h</filename>
</para>
<programlisting>
/* Definition of structure storing data for this element. */
typedef struct _GstExample GstExample;
struct _GstExample {
GstElement element;
GstPad *sinkpad,*srcpad;
gint8 active;
};
/* Standard definition defining a class for this element. */
typedef struct _GstExampleClass GstExampleClass;
struct _GstExampleClass {
GstElementClass parent_class;
};
/* Standard macros for defining types for this element. */
#define GST_TYPE_EXAMPLE \
(gst_example_get_type())
#define GST_EXAMPLE(obj) \
(GTK_CHECK_CAST((obj),GST_TYPE_EXAMPLE,GstExample))
#define GST_EXAMPLE_CLASS(klass) \
(GTK_CHECK_CLASS_CAST((klass),GST_TYPE_EXAMPLE,GstExample))
#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. */
GtkType gst_example_get_type(void);
</programlisting>
</sect1>
<sect1 id="sect-boilerplate-filterfactory">
<title>Doing it the easy way with FilterFactory</title>
<para>
A plan for the future is to create a FilterFactory, to make the
process of making a new filter a simple process of specifying a few
details, and writing a small amount of code to perform the actual
data processing.
</para>
<para>
Unfortunately, this hasn't yet been implemented. It is also likely
that when it is, it will not be possible to cover all the possibilities
available by writing the boilerplate yourself, so some plugins will
always need to be manually registered.
</para>
<para>
As a rough outline of what is planned: the FilterFactory will take a
list of appropriate function pointers, and data structures to define
a filter. With a reasonable measure of preprocessor magic, the
plugin writer will then simply need to provide definitions of the
functions and data structures desired, and a name for the filter, and
then call a macro from within plugin_init() which will register the
new filter. All the fluff that goes into the definition of a filter
will thus be hidden from view.
</para>
<para>
Ideally, we will come up with a way for various FilterFactory-provided
functions to be overridden, to the point where you can construct
almost the most complex stuff with it, it just saves typing.
</para>
<para>
Of course, the filter factory can be used to create sources and sinks
too: simply create a filter with only source or sink pads.
</para>
<para>
You may be thinking that this should really be called an
ElementFactory. Well, we agree, but there is already something else
justifiably ealled an ElementFactory (this is the thing which actually
makes instances of elements). There is also already something called
a PluginFactory. We just have too many factories and not enough words.
And since this isn't yet written, it doesn't get priority for claiming
a name.
</para>
</sect1>
</chapter>
<chapter id="cha-defineelt">
<title>Defining an element</title>
<para>
A new element is defined by creating an element factory. This is a
structure containing all the information needed to create an instance
of the element. Creating a factory requires two things: a type for
the element to be created
(this was defined in the boilerplate above: FIXME - reorganise),
and a GstElementDetails structure, which contains some
general information about the element to be created.
</para>
<sect1 id="sect-defineelt-eltdetails">
<title>GstElementDetails</title>
<para>
The GstElementDetails structure gives a heirarchical type for
the element, a human-readable description of the element, as
well as author and version data. The entries are:
</para>
<itemizedlist>
<listitem><para>
A long, english, name for the element.
</para></listitem><listitem><para>
The type of the element, as a heirarchy. The heirarchy is defined
by specifying the top level category, followed by a "/", followed
by the next level category, etc. The type should be defined
according to the guidelines elsewhere in this document.
(FIXME: write the guidelines, and give a better reference to them)
</para></listitem><listitem><para>
A brief description of the purpose of the element.
</para></listitem><listitem><para>
The version number of the element. For elements in the main
GStreamer source code, this will often simply be VERSION, which is
a macro defined to be the version number of the current GStreamer
version. The only requirement, however, is that the version
number should increase monotonically.
</para><para>
Version numbers should be stored in major.minor.patch form: ie, 3
(decimal) numbers, separated by ".".
</para></listitem><listitem><para>
The name of the author of the element, optionally followed by
a contact email address in angle brackets.
</para></listitem><listitem><para>
The copyright details for the element.
</para></listitem>
</itemizedlist>
<para>
For example:
</para>
<programlisting>
static GstElementDetails example_details = {
"An example plugin",
"Example/FirstExample",
"Shows the basic structure of a plugin",
VERSION,
"your name &lt;your.name@your.isp&gt;",
"(C) 2001",
};
</programlisting>
</sect1>
<sect1 id="sect-defineelt-constructors">
<title>Constructor functions</title>
<para>
Each element has two functions which are used for construction of
an element. These are the _class_init() function, which is used to
initialise the class (specifying what signals and arguments the class
has and setting up global state), and the _init() function, which
is used to initialise a specific instance of the class.
</para>
</sect1>
<sect1 id="sect-defineelt-pads">
<title>Specifying the pads</title>
<para>
</para>
</sect1>
<sect1 id="sect-defineelt-fns">
<title>Attaching functions</title>
<para>
</para>
</sect1>
<sect1 id="sect-defineelt-chainfn">
<title>The chain function</title>
<para>
</para>
</sect1>
<sect1 id="sect-defineelt-arguments">
<title>Adding arguments</title>
<para>
Define arguments in enum.
</para>
</sect1>
<sect1 id="sect-defineelt-signals">
<title>Signals</title>
<para>
Define signals in enum.
</para>
</sect1>
</chapter>
<chapter id="cha-definetype">
<title>Defining a type</title>
<para>
A new type is defined by creating an type factory. This is a
structure containing all the information needed to create an instance
of the type.
</para>
</chapter>
<chapter id="cha-plugininit">
<title>The plugin_init function</title>
<para>
Once we have written code defining all the parts of the plugin,
we need to write the plugin_init() function. This is a special
function, which is called as soon as the plugin is loaded, and
must return a pointer to a newly allocated GstPlugin structure.
This structure contains the details of all the facilities provided
by the plugin, and is the mechanism by which the definitions are
made available to the rest of the &GStreamer; system. Helper
functions are provided to help fill the
structure: for future compatability it is recommended that these
functions are used, as documented below, rather than attempting to
access the structure directly.
</para>
<para>
Note that the information returned by the plugin_init() function
will be cached in a central registry. For this reason, it is
important that the same information is always returned by
the function: for example, it must not make element factories
available based on runtime conditions. If an element can only
work in certain conditions (for example, if the soundcard is not
being used by some other process) this must be reflected by the
element being unable to enter the READY state if unavailable, rather
than the plugin attempting to deny existence of the plugin.
</para>
<sect1 id="sect-plugininit-types">
<title>Registering new types</title>
<para>
</para>
<programlisting>
void gst_plugin_add_type(GstPlugin *plugin,
GstTypeFactory *factory);
</programlisting>
<para>
</para>
</sect1>
<sect1 id="sect-plugininit-filter">
<title>Registering new element factories</title>
<para>
</para>
<programlisting>
void gst_plugin_add_factory(GstPlugin *plugin,
GstElementFactory *factory);
</programlisting>
<para>
Multiple element factories can be provided by a single plugin:
all it needs to do is call gst_plugin_add_factory() for each
element factory it wishes to provide.
</para>
</sect1>
<sect1 id="sect-plugininit-autopluggers">
<title>Registering new autopluggers</title>
<para>
</para>
<programlisting>
void gst_plugin_add_autoplugger(GstPlugin *plugin,
GstAutoplugFactory *factory);
</programlisting>
</sect1>
</chapter>
</part>
@ -112,17 +746,6 @@
&LOOPBASED;
</part>
<!-- ############ part ############# -->
<part id="typesnprops"><title>Types and Properties</title>
<partintro>
<para>
</para>
</partintro>
&TYPESNPROPS;
</part>
<!-- ############ part ############# -->
<part id="buffersnmeta"><title>Buffers and Metadata</title>

View file

@ -17,7 +17,7 @@
</para>
</chapter>
<chapter id="cha-testapp-connect">
<chapter id="cha-testapp-running">
<title>Running the pipeline</title>
<para>
</para>

View file

@ -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

View file

@ -1,24 +0,0 @@
<chapter id="cha-types-test">
<title>Building a simple format for testing</title>
<para>
</para>
</chapter>
<chapter id="cha-types-simplemime">
<title>A simple MIME type</title>
<para>
</para>
</chapter>
<chapter id="cha-types-props">
<title>Type properties</title>
<para>
</para>
</chapter>
<chapter id="cha-types-typefind">
<title>Typefind functions and autoplugging</title>
<para>
</para>
</chapter>

View file

@ -19,17 +19,13 @@ GST_LIBS += ../../gst/elements/libgstelements.la
TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
tmpl_sources = \
tmpl/audioraw.sgml \
tmpl/cothreads.sgml \
tmpl/gst.sgml \
tmpl/gstinfo.sgml \
tmpl/gstasyncdisksrc.sgml \
tmpl/gstautoplug.sgml \
tmpl/gstscheduler.sgml \
tmpl/gstprops.sgml \
tmpl/gstcaps.sgml \
tmpl/gstaudiosink.sgml \
tmpl/gstaudiosrc.sgml \
tmpl/gstbin.sgml \
tmpl/gstbuffer.sgml \
tmpl/gstbufferpool.sgml \
@ -56,8 +52,7 @@ tmpl_sources = \
tmpl/gsttype.sgml \
tmpl/gstutils.sgml \
tmpl/gstxml.sgml \
tmpl/spectrum.sgml \
tmpl/videoraw.sgml
tmpl/spectrum.sgml
gstreamer_docdir = $(HTML_DIR)
gstreamer_doc_DATA = \
@ -89,7 +84,7 @@ gstreamer-decl.txt:
scanobj: $(srcdir)/$(DOC_MODULE).types
rm gstreamer-scan.o; ln -s gstreamer-scan.lo gstreamer-scan.o
env CC="$(LIBTOOL) $(CC)" CFLAGS="$(GST_CFLAGS) $(GLIB_CFLAGS) $(XML_CFLAGS) -I../../" LDFLAGS="$(GST_LIBS)"\
env CC="$(LIBTOOL) $(CC)" CFLAGS="$(LIBGST_CFLAGS) $(GLIB_CFLAGS) $(XML_CFLAGS) -I../../" LDFLAGS="$(GST_LIBS)"\
gtkdoc-scanobj --module=$(DOC_MODULE)
gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)

View file

@ -27,23 +27,20 @@
<!entity GstTypeFind SYSTEM "sgml/gsttypefind.sgml">
<!entity cothreads SYSTEM "sgml/cothreads.sgml">
<!entity GstStaticAutoplug SYSTEM "sgml/gststaticautoplug.sgml">
<!entity GstStaticAutoplugRender SYSTEM "sgml/gststaticautoplugrender.sgml">
<!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">
<!entity GstSineSrc SYSTEM "sgml/gstsinesrc.sgml">
<!entity GstAudioSink SYSTEM "sgml/gstaudiosink.sgml">
<!entity GstFdSink SYSTEM "sgml/gstfdsink.sgml">
<!entity GstIdentity SYSTEM "sgml/gstidentity.sgml">
<!entity GstPipefilter SYSTEM "sgml/gstpipefilter.sgml">
<!entity GstTee SYSTEM "sgml/gsttee.sgml">
<!entity audioraw SYSTEM "sgml/audioraw.sgml">
<!entity spectrum SYSTEM "sgml/spectrum.sgml">
<!entity videoraw SYSTEM "sgml/videoraw.sgml">
<!entity gstreamer-tree-index SYSTEM "sgml/tree_index.sgml">
]>
@ -125,12 +122,8 @@ with some more specialized elements.</para>
&GstFakeSink;
&GstDiskSrc;
&GstAsyncDiskSrc;
&GstHttpSrc;
&GstAudioSrc;
&GstAudioSink;
&GstSineSrc;
&GstFdSrc;
@ -148,8 +141,16 @@ with some more specialized elements.</para>
<para>MetaData is used to specify the content of buffers. See <classname>GstMeta</classname>. </para>
&spectrum;
&audioraw;
&videoraw;
</chapter>
<chapter id="autopluggers">
<title>GStreamer Autoppluggers</title>
<para>the autopluggers provide a way to automatically construct elements based on
sink and src capabilities</para>
&GstStaticAutoplug;
&GstStaticAutoplugRender;
</chapter>
<chapter id="gst-index">

View file

@ -120,6 +120,7 @@ gst_parse_launch
GST_ARCH_CALL
GST_ARCH_SET_SP
GST_ARCH_SETUP_STACK
GST_ARCH_PRESETJMP
</SECTION>
<SECTION>
@ -191,6 +192,7 @@ GST_ELEMENT_IS_COTHREAD_STOPPING
GST_ELEMENT_IS_EOS
GST_ELEMENT_PARENT
GST_ELEMENT_NAME
GST_ELEMENT_PADS
GstElement
GstElementDetails
GstElementFactory
@ -227,8 +229,6 @@ gst_elementfactory_find
gst_elementfactory_get_list
gst_elementfactory_can_src_caps
gst_elementfactory_can_sink_caps
gst_elementfactory_can_src_caps_list
gst_elementfactory_can_sink_caps_list
gst_elementfactory_create
gst_elementfactory_make
gst_elementfactory_save_thyself
@ -243,6 +243,32 @@ GST_IS_ELEMENT_CLASS
gst_element_get_type
</SECTION>
<SECTION>
<FILE>gstautoplug</FILE>
<TITLE>GstAutoplug</TITLE>
GstAutoplug
GstAutoplugFlags
GstAutoplugFactory
gst_autoplug_signal_new_object
gst_autoplug_to_caps
gst_autoplug_to_renderers
gst_autoplugfactory_new
gst_autoplugfactory_destroy
gst_autoplugfactory_find
gst_autoplugfactory_get_list
gst_autoplugfactory_create
gst_autoplugfactory_make
gst_autoplugfactory_save_thyself
gst_autoplugfactory_load_thyself
<SUBSECTION Standard>
GST_AUTOPLUG
GST_IS_AUTOPLUG
GST_TYPE_AUTOPLUG
gst_autoplug_get_type
GST_AUTOPLUG_CLASS
GST_IS_AUTOPLUG_CLASS
</SECTION>
<SECTION>
<FILE>gstclock</FILE>
GstClockTime
@ -340,9 +366,16 @@ GstPadGetFunction
GstPadGetRegionFunction
GstPadQoSFunction
GstPadEOSFunction
GstPadNewCapsFunction
GstPadNegotiateReturn
GstPadNegotiateFunction
GstPadPushFunction
GstPadPullFunction
GstRegionType
GstPadPullRegionFunction
GstPadDirection
@ -354,11 +387,12 @@ gst_pad_get_direction
gst_pad_set_chain_function
gst_pad_set_get_function
gst_pad_set_getregion_function
gst_pad_set_negotiate_function
gst_pad_set_qos_function
gst_pad_set_eos_function
gst_pad_set_caps_list
gst_pad_get_caps_list
gst_pad_get_caps_by_name
gst_pad_set_newcaps_function
gst_pad_set_caps
gst_pad_get_caps
gst_pad_check_compatibility
gst_pad_set_name
gst_pad_get_name
@ -366,6 +400,7 @@ gst_pad_set_element_private
gst_pad_get_element_private
gst_pad_set_parent
gst_pad_get_parent
gst_pad_get_real_parent
gst_pad_add_ghost_pad
gst_pad_remove_ghost_pad
gst_pad_get_ghost_pad_list
@ -374,13 +409,20 @@ 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_pad_negotiate_proxy
gst_pad_renegotiate
gst_pad_get_padtemplate
gst_pad_get_padtemplate_caps
GST_RPAD_LEN
GST_RPAD_OFFSET
GST_RPAD_REGIONTYPE
GstRealPad
GST_RPAD_DIRECTION
@ -395,26 +437,24 @@ GST_RPAD_PULLFUNC
GST_RPAD_PULLREGIONFUNC
GST_RPAD_QOSFUNC
GST_RPAD_EOSFUNC
GST_RPAD_NEGOTIATEFUNC
GST_RPAD_NEWCAPSFUNC
GST_GPAD_REALPAD
GstGhostPad
gst_ghost_pad_new
GstPadFactoryEntry
GstPadFactory[]
GST_PAD_FACTORY_SOMETIMES
GST_PAD_FACTORY_ALWAYS
GST_PAD_FACTORY_REQUEST
GST_PAD_FACTORY_SINK
GST_PAD_FACTORY_SRC
GST_PAD_FACTORY_CAPS
GstPadPresence
GstPadTemplate
GST_PADTEMPLATE_CAPS
GST_PADTEMPLATE_DIRECTION
GST_PADTEMPLATE_NAME_TEMPLATE
GST_PADTEMPLATE_PRESENCE
gst_padtemplate_new
gst_padtemplate_create
gst_padtemplate_load_thyself
gst_padtemplate_save_thyself
gst_padtemplate_get_caps
gst_padtemplate_get_caps_by_name
<SUBSECTION Standard>
GstPadClass
@ -455,9 +495,6 @@ gst_padtemplate_get_type
<TITLE>GstPipeline</TITLE>
GstPipeline
gst_pipeline_new
gst_pipeline_add_sink
gst_pipeline_add_src
gst_pipeline_autoplug
gst_pipeline_destroy
gst_pipeline_iterate
<SUBSECTION Standard>
@ -471,25 +508,6 @@ GST_IS_PIPELINE_CLASS
gst_pipeline_details
</SECTION>
<SECTION>
<FILE>gstautoplug</FILE>
<TITLE>GstAutoplug</TITLE>
GST_AUTOPLUG_MAX_COST
GstAutoplugCostFunction
GstAutoplugListFunction
gst_autoplug_caps
gst_autoplug_pads
gst_autoplug_caps_list
<SUBSECTION Standard>
GstAutoplug
GST_AUTOPLUG
GST_IS_AUTOPLUG
GST_TYPE_AUTOPLUG
gst_autoplug_get_type
GST_AUTOPLUG_CLASS
GST_IS_AUTOPLUG_CLASS
</SECTION>
<SECTION>
<FILE>gstplugin</FILE>
<TITLE>GstPlugin</TITLE>
@ -506,16 +524,19 @@ 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
gst_plugin_add_autoplugger
gst_plugin_find
gst_plugin_get_list
gst_plugin_get_factory_list
gst_plugin_get_type_list
gst_plugin_find_elementfactory
gst_plugin_get_autoplug_list
gst_plugin_load_elementfactory
gst_plugin_load_typefactory
gst_plugin_load_autoplugfactory
gst_plugin_load_thyself
gst_plugin_save_thyself
<SUBSECTION Standard>
@ -591,63 +612,79 @@ gst_typefactory_save_thyself
<SECTION>
<FILE>gstcaps</FILE>
<TITLE>GstCaps</TITLE>
GST_CAPS_LOCK
GST_CAPS_TRYLOCK
GST_CAPS_UNLOCK
GstCaps
GstCapsFactoryEntry
GstCapsFactory[]
gst_caps_new
gst_caps_new_with_props
gst_caps_register
gst_caps_register_count
gst_caps_destroy
gst_caps_ref
gst_caps_unref
gst_caps_copy
gst_caps_copy_on_write
gst_caps_append
gst_caps_prepend
gst_caps_set_name
gst_caps_get_name
gst_caps_set_mime
gst_caps_set_type_id
gst_caps_get_type_id
gst_caps_set_mime
gst_caps_get_mime
gst_caps_set_name
gst_caps_set_props
gst_caps_get_props
gst_caps_check_compatibility
gst_caps_list_check_compatibility
gst_caps_set
gst_caps_get_boolean
gst_caps_get_by_name
gst_caps_get_fourcc_int
gst_caps_get_int
gst_caps_get_string
gst_caps_save_thyself
gst_caps_load_thyself
<SUBSECTION Standard>
GST_CAPS
</SECTION>
<SECTION>
<FILE>gstprops</FILE>
<TITLE>GstProps</TITLE>
GstProps
GstPropsFactoryEntry
GstPropsFactory[]
GST_MAKE_FOURCC
GST_PROPS_LIST
GST_PROPS_INT
GST_PROPS_INT_RANGE
GST_PROPS_FOURCC
GST_PROPS_FOURCC_INT
GST_PROPS_BOOLEAN
gst_props_register
gst_props_register_count
GST_PROPS_STRING
GST_PROPS_FLOAT
GST_PROPS_FLOAT_RANGE
gst_props_new
gst_props_newv
gst_props_merge
gst_props_copy
gst_props_copy_on_write
gst_props_destroy
gst_props_ref
gst_props_unref
gst_props_check_compatibility
gst_props_set
gst_props_get_boolean
gst_props_get_fourcc_int
gst_props_get_int
gst_props_get_string
gst_props_save_thyself
gst_props_load_thyself
<SUBSECTION Standard>
GstPropsEntry
GstPropsListFactory[]
GstPropsId
GST_PROPS_END_ID
GST_PROPS_LIST_ID
GST_PROPS_INT_ID
GST_PROPS_INT_RANGE_ID
GST_PROPS_FOURCC_ID
GST_PROPS_BOOL_ID
GST_PROPS_LAST_ID
</SECTION>
<SECTION>
<FILE>gstutils</FILE>
<TITLE>GstUtils</TITLE>
gst_util_set_object_arg
gst_util_get_int_arg
gst_util_get_bool_arg
gst_util_get_long_arg
@ -691,49 +728,29 @@ gst_cpu_get_flags
</SECTION>
<SECTION>
<FILE>gstasyncdisksrc</FILE>
<TITLE>GstAsyncDiskSrc</TITLE>
GstAsyncDiskSrcFlags
<FILE>gststaticautoplug</FILE>
<TITLE>GstStaticAutoplug</TITLE>
<SUBSECTION Standard>
GstAsyncDiskSrc
GstAsyncDiskSrcClass
gst_asyncdisksrc_get_type
GST_TYPE_ASYNCDISKSRC
GST_ASYNCDISKSRC
GST_ASYNCDISKSRC_CLASS
GST_IS_ASYNCDISKSRC
GST_IS_ASYNCDISKSRC_CLASS
GstStaticAutoplug
GST_STATIC_AUTOPLUG
GST_IS_STATIC_AUTOPLUG
GST_TYPE_STATIC_AUTOPLUG
gst_static_autoplug_get_type
GST_STATIC_AUTOPLUG_CLASS
GST_IS_STATIC_AUTOPLUG_CLASS
</SECTION>
<SECTION>
<FILE>gstaudiosink</FILE>
<TITLE>GstAudioSink</TITLE>
<FILE>gststaticautoplugrender</FILE>
<TITLE>GstStaticAutoplugRender</TITLE>
<SUBSECTION Standard>
GstAudioSink
GstAudioSinkClass
GstAudioSinkFlags
gst_audiosink_get_type
GST_TYPE_AUDIOSINK
GST_AUDIOSINK
GST_AUDIOSINK_CLASS
GST_IS_AUDIOSINK
GST_IS_AUDIOSINK_CLASS
gst_audiosink_factory_init
</SECTION>
<SECTION>
<FILE>gstaudiosrc</FILE>
<TITLE>GstAudioSrc</TITLE>
<SUBSECTION Standard>
GstAudioSrc
GstAudioSrcClass
GstAudioSrcFlags
gst_audiosrc_get_type
GST_TYPE_AUDIOSRC
GST_AUDIOSRC
GST_AUDIOSRC_CLASS
GST_IS_AUDIOSRC
GST_IS_AUDIOSRC_CLASS
GstStaticAutoplugRender
GST_STATIC_AUTOPLUG_RENDER
GST_IS_STATIC_AUTOPLUG_RENDER
GST_TYPE_STATIC_AUTOPLUG_RENDER
gst_static_autoplug_render_get_type
GST_STATIC_AUTOPLUG_RENDER_CLASS
GST_IS_STATIC_AUTOPLUG_RENDER_CLASS
</SECTION>
<SECTION>
@ -749,7 +766,6 @@ GST_DISKSRC
GST_DISKSRC_CLASS
GST_IS_DISKSRC
GST_IS_DISKSRC_CLASS
gst_disksrc_details
</SECTION>
<SECTION>
@ -896,9 +912,17 @@ GST_IS_TYPEFIND_CLASS
</SECTION>
<SECTION>
<INCLUDE>gst/meta/audioraw.h</INCLUDE>
<FILE>audioraw</FILE>
MetaAudioRaw
<FILE>gstmultidisksrc</FILE>
<TITLE>GstMultiDiskSrc</TITLE>
GstMultiDiskSrcFlags
<SUBSECTION Standard>
GstMultiDiskSrc
GST_MULTIDISKSRC
GST_IS_MULTIDISKSRC
GST_TYPE_MULTIDISKSRC
gst_multidisksrc_get_type
GST_MULTIDISKSRC_CLASS
GST_IS_MULTIDISKSRC_CLASS
</SECTION>
<SECTION>
@ -907,12 +931,3 @@ MetaAudioRaw
MetaAudioSpectrum
</SECTION>
<SECTION>
<INCLUDE>gst/meta/videoraw.h</INCLUDE>
<FILE>videoraw</FILE>
MetaVideoRaw
MetaDGA
MetaOverlay
OverlayClip
</SECTION>

View file

@ -9,12 +9,9 @@ GtkObject
GstFakeSrc
GstFakeSink
GstDiskSrc
GstAsyncDiskSrc
GstHttpSrc
GstFdSrc
GstAudioSrc
GstSineSrc
GstAudioSink
GstFdSink
GstPipefilter
GstIdentity

View file

@ -16,13 +16,10 @@ gst_fakesrc_get_type
gst_fakesink_get_type
gst_disksrc_get_type
gst_asyncdisksrc_get_type
@GST_HTTPSRC_GET_TYPE@
gst_fdsrc_get_type
gst_audiosrc_get_type
gst_sinesrc_get_type
gst_audiosink_get_type
gst_fdsink_get_type
gst_pipefilter_get_type

View file

@ -38,3 +38,10 @@ gstarch
@sp:
<!-- ##### MACRO GST_ARCH_PRESETJMP ##### -->
<para>
</para>

View file

@ -1,54 +0,0 @@
<!-- ##### SECTION Title ##### -->
GstAsyncDiskSrc
<!-- ##### SECTION Short_Description ##### -->
Asynchronous disk reader. (asyncdisksrc)
<!-- ##### SECTION Long_Description ##### -->
<para>
Reads data from a file. You can seek to a specific location by setting
the offset.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### ENUM GstAsyncDiskSrcFlags ##### -->
<para>
<informaltable pgwide=1 frame="none" role="enum">
<tgroup cols="2"><colspec colwidth="2*"><colspec colwidth="8*">
<tbody>
<row>
<entry>GST_ASYNCDISKSRC_OPEN</entry>
<entry>the asyncdisksrc is open for reading</entry>
</row>
</tbody></tgroup></informaltable>
</para>
@GST_ASYNCDISKSRC_OPEN:
@GST_ASYNCDISKSRC_FLAG_LAST:
<!-- ##### ARG GstAsyncDiskSrc:location ##### -->
<para>
Specify the location of the file to read.
</para>
<!-- ##### ARG GstAsyncDiskSrc:bytesperread ##### -->
<para>
Specify how many bytes to read at a time.
</para>
<!-- ##### ARG GstAsyncDiskSrc:offset ##### -->
<para>
Specify the current offset in the file.
</para>
<!-- ##### ARG GstAsyncDiskSrc:size ##### -->
<para>
</para>

View file

@ -1,45 +0,0 @@
<!-- ##### SECTION Title ##### -->
GstAudioSink
<!-- ##### SECTION Short_Description ##### -->
Output to a sound card via OSS. (audiosink)
<!-- ##### SECTION Long_Description ##### -->
<para>
Output to a sound card via OSS.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SIGNAL GstAudioSink::handoff ##### -->
<para>
The buffer is sent to the sound card.
</para>
@gstaudiosink: the object which received the signal.
<!-- # Unused Parameters # -->
@arg1: the audiosink.
<!-- ##### ARG GstAudioSink:mute ##### -->
<para>
</para>
<!-- ##### ARG GstAudioSink:format ##### -->
<para>
</para>
<!-- ##### ARG GstAudioSink:channels ##### -->
<para>
</para>
<!-- ##### ARG GstAudioSink:frequency ##### -->
<para>
</para>

View file

@ -1,41 +0,0 @@
<!-- ##### SECTION Title ##### -->
GstAudioSrc
<!-- ##### SECTION Short_Description ##### -->
Read from the sound card. (audiosrc)
<!-- ##### SECTION Long_Description ##### -->
<para>
Create buffers from an OSS sound card.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### ARG GstAudioSrc:bytes_per_read ##### -->
<para>
The number of bytes per read.
</para>
<!-- ##### ARG GstAudioSrc:curoffset ##### -->
<para>
Get the current number of bytes read.
</para>
<!-- ##### ARG GstAudioSrc:format ##### -->
<para>
The audio format as defined in soundcard.h
</para>
<!-- ##### ARG GstAudioSrc:channels ##### -->
<para>
The number of channels (mono, stereo, ...)
</para>
<!-- ##### ARG GstAudioSrc:frequency ##### -->
<para>
The frequency.
</para>

View file

@ -2,12 +2,12 @@
GstAutoplug
<!-- ##### SECTION Short_Description ##### -->
Provide automatic element selection.
Automatically create and connect elements
<!-- ##### SECTION Long_Description ##### -->
<para>
The autoplugger can select a list of elements that are needed
to convert a certain GstCaps to another one.
GstAutoplug is an abstract class that is used for constructing and
connecting elements.
</para>
<!-- ##### SECTION See_Also ##### -->
@ -15,60 +15,134 @@ to convert a certain GstCaps to another one.
</para>
<!-- ##### MACRO GST_AUTOPLUG_MAX_COST ##### -->
<para>
The maximum cost of a certain connection.
</para>
<!-- ##### 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
<!-- ##### 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_autoplug_caps ##### -->
<!-- ##### STRUCT GstAutoplug ##### -->
<para>
</para>
@object:
<!-- ##### ENUM GstAutoplugFlags ##### -->
<para>
</para>
@GST_AUTOPLUG_TO_CAPS:
@GST_AUTOPLUG_TO_RENDERER:
@GST_AUTOPLUG_FLAG_LAST:
<!-- ##### STRUCT GstAutoplugFactory ##### -->
<para>
</para>
@name:
@longdesc:
@type:
<!-- ##### FUNCTION gst_autoplug_signal_new_object ##### -->
<para>
</para>
@autoplug:
@object:
<!-- ##### FUNCTION gst_autoplug_to_caps ##### -->
<para>
</para>
@autoplug:
@srccaps:
@sinkcaps:
@Varargs:
@Returns:
<!-- ##### FUNCTION gst_autoplug_pads ##### -->
<para>
</para>
@srcpad:
@sinkpad:
@Returns:
<!-- ##### FUNCTION gst_autoplug_caps_list ##### -->
<!-- ##### FUNCTION gst_autoplug_to_renderers ##### -->
<para>
</para>
@autoplug:
@srccaps:
@sinkcaps:
@target:
@Varargs:
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_new ##### -->
<para>
</para>
@name:
@longdesc:
@type:
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_destroy ##### -->
<para>
</para>
@factory:
<!-- ##### FUNCTION gst_autoplugfactory_find ##### -->
<para>
</para>
@name:
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_get_list ##### -->
<para>
</para>
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_create ##### -->
<para>
</para>
@factory:
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_make ##### -->
<para>
</para>
@name:
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_save_thyself ##### -->
<para>
</para>
@factory:
@parent:
@Returns:
<!-- ##### FUNCTION gst_autoplugfactory_load_thyself ##### -->
<para>
</para>
@parent:
@Returns:

View file

@ -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>

View file

@ -15,6 +15,30 @@ a mime-type and a set of properties.
</para>
<!-- ##### MACRO GST_CAPS_LOCK ##### -->
<para>
Lock the caps structure
</para>
@caps: The caps structure to lock
<!-- ##### MACRO GST_CAPS_TRYLOCK ##### -->
<para>
Try to lock the caps structure
</para>
@caps: The caps structure to try to lock
<!-- ##### MACRO GST_CAPS_UNLOCK ##### -->
<para>
Unlock the caps structure
</para>
@caps: The caps structure to unlock
<!-- ##### STRUCT GstCaps ##### -->
<para>
@ -22,60 +46,91 @@ a mime-type and a set of properties.
@name: the name of the capability, for the application
@id: the typeid of the capability
@refcount: a refcounter for this caps structure
@lock: the lock for this caps structure
@properties: the properties of the capability
<!-- ##### TYPEDEF GstCapsFactoryEntry ##### -->
<para>
</para>
<!-- ##### TYPEDEF GstCapsFactory[] ##### -->
<para>
</para>
@next: a pointer to the next caps.
<!-- ##### FUNCTION gst_caps_new ##### -->
<para>
</para>
@name:
@mime:
@Returns:
<!-- ##### FUNCTION gst_caps_new_with_props ##### -->
<para>
</para>
@name:
@mime:
@props:
@Returns:
<!-- ##### FUNCTION gst_caps_register ##### -->
<!-- ##### FUNCTION gst_caps_destroy ##### -->
<para>
</para>
@factory:
@Returns:
@caps:
<!-- ##### FUNCTION gst_caps_register_count ##### -->
<!-- ##### FUNCTION gst_caps_ref ##### -->
<para>
</para>
@factory:
@counter:
@caps:
<!-- ##### FUNCTION gst_caps_unref ##### -->
<para>
</para>
@caps:
<!-- ##### FUNCTION gst_caps_copy ##### -->
<para>
</para>
@caps:
@Returns:
<!-- # Unused Parameters # -->
@count:
<!-- ##### FUNCTION gst_caps_copy_on_write ##### -->
<para>
</para>
@caps:
@Returns:
<!-- ##### FUNCTION gst_caps_append ##### -->
<para>
</para>
@caps:
@capstoadd:
@Returns:
<!-- ##### FUNCTION gst_caps_prepend ##### -->
<para>
</para>
@caps:
@capstoadd:
@Returns:
<!-- ##### FUNCTION gst_caps_set_name ##### -->
<para>
</para>
@caps:
@name:
<!-- ##### FUNCTION gst_caps_get_name ##### -->
@ -87,6 +142,27 @@ a mime-type and a set of properties.
@Returns:
<!-- ##### FUNCTION gst_caps_set_type_id ##### -->
<para>
</para>
@caps:
@type_id:
<!-- # Unused Parameters # -->
@Param2:
@typeid:
<!-- ##### FUNCTION gst_caps_get_type_id ##### -->
<para>
</para>
@caps:
@Returns:
<!-- ##### FUNCTION gst_caps_set_mime ##### -->
<para>
@ -96,24 +172,6 @@ a mime-type and a set of properties.
@mime:
<!-- ##### FUNCTION gst_caps_set_type_id ##### -->
<para>
</para>
@caps:
@typeid:
<!-- ##### FUNCTION gst_caps_get_type_id ##### -->
<para>
</para>
@caps:
@Returns:
<!-- ##### FUNCTION gst_caps_get_mime ##### -->
<para>
@ -123,15 +181,6 @@ a mime-type and a set of properties.
@Returns:
<!-- ##### FUNCTION gst_caps_set_name ##### -->
<para>
</para>
@caps:
@name:
<!-- ##### FUNCTION gst_caps_set_props ##### -->
<para>
@ -159,21 +208,64 @@ a mime-type and a set of properties.
@fromcaps:
@tocaps:
@Returns:
<!-- # Unused Parameters # -->
@caps1:
@caps2:
<!-- ##### FUNCTION gst_caps_list_check_compatibility ##### -->
<!-- ##### MACRO gst_caps_set ##### -->
<para>
</para>
@fromcaps:
@tocaps:
@caps:
@name:
@args...:
<!-- ##### MACRO gst_caps_get_boolean ##### -->
<para>
</para>
@caps:
@name:
<!-- ##### FUNCTION gst_caps_get_by_name ##### -->
<para>
</para>
@caps:
@name:
@Returns:
<!-- ##### MACRO gst_caps_get_fourcc_int ##### -->
<para>
</para>
@caps:
@name:
<!-- ##### MACRO gst_caps_get_int ##### -->
<para>
</para>
@caps:
@name:
<!-- ##### MACRO gst_caps_get_string ##### -->
<para>
</para>
@caps:
@name:
<!-- ##### FUNCTION gst_caps_save_thyself ##### -->
<para>

View file

@ -25,6 +25,8 @@ features of the CPU.
@GST_CPU_FLAG_MMX:
@GST_CPU_FLAG_SSE:
@GST_CPU_FLAG_MMXEXT:
@GST_CPU_FLAG_3DNOW:
<!-- ##### FUNCTION gst_cpu_get_flags ##### -->
<para>

View file

@ -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>

View file

@ -174,6 +174,14 @@ Get the name of this element.
@obj: The element to query
<!-- ##### MACRO GST_ELEMENT_PADS ##### -->
<para>
Get the pads of this elements.
</para>
@obj: The element to query
<!-- ##### STRUCT GstElement ##### -->
<para>
@ -519,26 +527,6 @@ circumstances.
@Returns:
<!-- ##### FUNCTION gst_elementfactory_can_src_caps_list ##### -->
<para>
</para>
@factory:
@caps:
@Returns:
<!-- ##### FUNCTION gst_elementfactory_can_sink_caps_list ##### -->
<para>
</para>
@factory:
@caps:
@Returns:
<!-- ##### FUNCTION gst_elementfactory_create ##### -->
<para>

View file

@ -1,12 +1,12 @@
<!-- ##### SECTION Title ##### -->
audioraw
GstMultiDiskSrc
<!-- ##### SECTION Short_Description ##### -->
Information about audio buffers.
<!-- ##### SECTION Long_Description ##### -->
<para>
Information about audio buffers.
</para>
<!-- ##### SECTION See_Also ##### -->
@ -14,14 +14,11 @@ Information about audio buffers.
</para>
<!-- ##### STRUCT MetaAudioRaw ##### -->
<!-- ##### ENUM GstMultiDiskSrcFlags ##### -->
<para>
</para>
@meta:
@format:
@channels:
@frequency:
@bps:
@GST_MULTIDISKSRC_OPEN:
@GST_MULTIDISKSRC_FLAG_LAST:

View file

@ -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 ##### -->

View file

@ -124,12 +124,17 @@ 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: the type of region to get (time or offset based)
@offset: the offset of the region to get
@size: the size of the region to get
@len: the length of the region to get
@Returns: a #GstBuffer
<!-- # Unused Parameters # -->
@size: the size of the region to get
<!-- ##### USER_FUNCTION GstPadQoSFunction ##### -->
@ -150,6 +155,37 @@ The function that will be called in an EOS case.
@Returns: TRUE if EOS was successful, FALSE otherwise
<!-- ##### USER_FUNCTION GstPadNewCapsFunction ##### -->
<para>
</para>
@pad:
@caps:
<!-- ##### ENUM GstPadNegotiateReturn ##### -->
<para>
The possible results from padnegotiation.
</para>
@GST_PAD_NEGOTIATE_FAIL: The pads could not agree about the media type.
@GST_PAD_NEGOTIATE_AGREE: The pads agreed about the media type.
@GST_PAD_NEGOTIATE_TRY: The pad did not agree and suggests another media type.
<!-- ##### USER_FUNCTION GstPadNegotiateFunction ##### -->
<para>
The function that will be called when negotiating.
</para>
@pad: The pad that is being negotiated
@caps: The current caps that are being negotiated
@data:
@Returns: The result of the negotiation process
<!-- # Unused Parameters # -->
@count: A counter to keep track of the negotiation process
<!-- ##### USER_FUNCTION GstPadPushFunction ##### -->
<para>
@ -169,15 +205,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
@offset: the offset of the region to pull
@size: the size of the region to pull
@Returns: a GstBuffer
@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 ##### -->
@ -264,6 +313,15 @@ Destroy the pad.
@getregion:
<!-- ##### FUNCTION gst_pad_set_negotiate_function ##### -->
<para>
</para>
@pad:
@nego:
<!-- ##### FUNCTION gst_pad_set_qos_function ##### -->
<para>
@ -282,31 +340,31 @@ Destroy the pad.
@eos:
<!-- ##### FUNCTION gst_pad_set_caps_list ##### -->
<!-- ##### FUNCTION gst_pad_set_newcaps_function ##### -->
<para>
</para>
@pad:
@newcaps:
<!-- ##### FUNCTION gst_pad_set_caps ##### -->
<para>
</para>
@pad:
@caps:
<!-- ##### FUNCTION gst_pad_get_caps_list ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### FUNCTION gst_pad_get_caps_by_name ##### -->
<!-- ##### FUNCTION gst_pad_get_caps ##### -->
<para>
</para>
@pad:
@name:
@Returns:
@ -374,6 +432,15 @@ Destroy the pad.
@Returns:
<!-- ##### FUNCTION gst_pad_get_real_parent ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### FUNCTION gst_pad_add_ghost_pad ##### -->
<para>
@ -417,6 +484,7 @@ Destroy the pad.
@srcpad:
@sinkpad:
@Returns:
<!-- ##### FUNCTION gst_pad_disconnect ##### -->
@ -434,6 +502,8 @@ Destroy the pad.
</para>
@pad:
@buf:
<!-- # Unused Parameters # -->
@buffer:
@ -446,37 +516,20 @@ Destroy the pad.
@Returns:
<!-- ##### FUNCTION gst_pad_pull_region ##### -->
<!-- ##### FUNCTION gst_pad_pullregion ##### -->
<para>
</para>
@pad:
@type:
@offset:
@size:
@len:
@Returns:
<!-- ##### MACRO gst_pad_pullregion ##### -->
<para>
</para>
@pad:
@offset:
<!-- # Unused Parameters # -->
@size:
<!-- ##### FUNCTION gst_pad_select ##### -->
<para>
</para>
@nextpad:
@Varargs:
@Returns:
<!-- ##### FUNCTION gst_pad_set_eos ##### -->
<para>
@ -515,6 +568,71 @@ Call the EOS function of the pad
@elements:
<!-- ##### FUNCTION gst_pad_negotiate_proxy ##### -->
<para>
</para>
@srcpad:
@destpad:
@caps:
@Returns:
<!-- # Unused Parameters # -->
@counter:
@count:
<!-- ##### FUNCTION gst_pad_renegotiate ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### FUNCTION gst_pad_get_padtemplate ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### FUNCTION gst_pad_get_padtemplate_caps ##### -->
<para>
</para>
@pad:
@Returns:
<!-- ##### MACRO GST_RPAD_LEN ##### -->
<para>
</para>
@pad:
<!-- ##### MACRO GST_RPAD_OFFSET ##### -->
<para>
</para>
@pad:
<!-- ##### MACRO GST_RPAD_REGIONTYPE ##### -->
<para>
</para>
@pad:
<!-- ##### STRUCT GstRealPad ##### -->
<para>
@ -526,6 +644,9 @@ Call the EOS function of the pad
@threadstate:
@peer:
@bufpen:
@regiontype:
@offset:
@len:
@chainfunc:
@getfunc:
@getregionfunc:
@ -534,6 +655,8 @@ Call the EOS function of the pad
@pushfunc:
@pullfunc:
@pullregionfunc:
@negotiatefunc:
@newcapsfunc:
@ghostpads:
<!-- ##### MACRO GST_RPAD_DIRECTION ##### -->
@ -632,6 +755,22 @@ Get the EOS function of the real pad.
@pad: the real pad to query.
<!-- ##### MACRO GST_RPAD_NEGOTIATEFUNC ##### -->
<para>
</para>
@pad:
<!-- ##### MACRO GST_RPAD_NEWCAPSFUNC ##### -->
<para>
</para>
@pad:
<!-- ##### MACRO GST_GPAD_REALPAD ##### -->
<para>
Get the real pad of this ghost pad.
@ -658,64 +797,6 @@ Get the real pad of this ghost pad.
@Returns:
<!-- ##### TYPEDEF GstPadFactoryEntry ##### -->
<para>
Defines an entry for a padfactory.
</para>
<!-- ##### TYPEDEF GstPadFactory[] ##### -->
<para>
The padfactory.
</para>
<!-- ##### MACRO GST_PAD_FACTORY_SOMETIMES ##### -->
<para>
Indicate that this pad will become available depending
on the media type. Use this in the factory definition.
</para>
<!-- ##### MACRO GST_PAD_FACTORY_ALWAYS ##### -->
<para>
Indicate that this pad will always be available.
Use this in the factory definition.
</para>
<!-- ##### MACRO GST_PAD_FACTORY_REQUEST ##### -->
<para>
Indicates that this pad will be available on request. Use
this in the factory definition.
</para>
<!-- ##### MACRO GST_PAD_FACTORY_SINK ##### -->
<para>
Indicates a sinkpad for the padfactory.
</para>
<!-- ##### MACRO GST_PAD_FACTORY_SRC ##### -->
<para>
Indicates a srcpad for the padfactory.
</para>
<!-- ##### MACRO GST_PAD_FACTORY_CAPS ##### -->
<para>
Starts the declaration of a the capabilities for this padtemplate.
</para>
@a...: a capability factory
<!-- ##### ENUM GstPadPresence ##### -->
<para>
Indicates when this pad will become available.
@ -736,16 +817,39 @@ Indicates when this pad will become available.
@presence:
@caps:
<!-- ##### FUNCTION gst_padtemplate_new ##### -->
<!-- ##### MACRO GST_PADTEMPLATE_CAPS ##### -->
<para>
</para>
@factory:
@Returns:
@templ:
<!-- ##### FUNCTION gst_padtemplate_create ##### -->
<!-- ##### MACRO GST_PADTEMPLATE_DIRECTION ##### -->
<para>
</para>
@templ:
<!-- ##### MACRO GST_PADTEMPLATE_NAME_TEMPLATE ##### -->
<para>
</para>
@templ:
<!-- ##### MACRO GST_PADTEMPLATE_PRESENCE ##### -->
<para>
</para>
@templ:
<!-- ##### FUNCTION gst_padtemplate_new ##### -->
<para>
</para>
@ -754,7 +858,10 @@ Indicates when this pad will become available.
@direction:
@presence:
@caps:
@Varargs:
@Returns:
<!-- # Unused Parameters # -->
@factory:
<!-- ##### FUNCTION gst_padtemplate_load_thyself ##### -->
@ -778,3 +885,22 @@ Indicates when this pad will become available.
@pad:
<!-- ##### FUNCTION gst_padtemplate_get_caps ##### -->
<para>
</para>
@templ:
@Returns:
<!-- ##### FUNCTION gst_padtemplate_get_caps_by_name ##### -->
<para>
</para>
@templ:
@name:
@Returns:

View file

@ -38,33 +38,6 @@ pipeline figure out what plugins to use.
@Returns:
<!-- ##### FUNCTION gst_pipeline_add_sink ##### -->
<para>
</para>
@pipeline:
@sink:
<!-- ##### FUNCTION gst_pipeline_add_src ##### -->
<para>
</para>
@pipeline:
@src:
<!-- ##### FUNCTION gst_pipeline_autoplug ##### -->
<para>
</para>
@pipeline:
@Returns:
<!-- ##### MACRO gst_pipeline_destroy ##### -->
<para>
Destroys the pipeline.

View file

@ -27,6 +27,8 @@ GStreamer is extensible so <classname>GstElements</classname> can be loaded at r
@numtypes:
@elements:
@numelements:
@autopluggers:
@numautopluggers:
@loaded:
<!-- ##### STRUCT GstPluginElement ##### -->
@ -133,6 +135,14 @@ by the loader at statup.
@Returns:
<!-- ##### FUNCTION gst_plugin_add_path ##### -->
<para>
</para>
@path:
<!-- ##### FUNCTION gst_library_load ##### -->
<para>
@ -160,6 +170,15 @@ by the loader at statup.
@factory:
<!-- ##### FUNCTION gst_plugin_add_autoplugger ##### -->
<para>
</para>
@plugin:
@factory:
<!-- ##### FUNCTION gst_plugin_find ##### -->
<para>
@ -195,12 +214,12 @@ by the loader at statup.
@Returns:
<!-- ##### FUNCTION gst_plugin_find_elementfactory ##### -->
<!-- ##### FUNCTION gst_plugin_get_autoplug_list ##### -->
<para>
</para>
@name:
@plugin:
@Returns:
@ -221,6 +240,15 @@ by the loader at statup.
@mime:
<!-- ##### FUNCTION gst_plugin_load_autoplugfactory ##### -->
<para>
</para>
@name:
@Returns:
<!-- ##### FUNCTION gst_plugin_load_thyself ##### -->
<para>

View file

@ -20,18 +20,19 @@ GstCaps
</para>
@refcount:
@lock:
@properties: the properties
<!-- ##### TYPEDEF GstPropsFactoryEntry ##### -->
<!-- ##### MACRO GST_MAKE_FOURCC ##### -->
<para>
</para>
<!-- ##### TYPEDEF GstPropsFactory[] ##### -->
<para>
</para>
@a:
@b:
@c:
@d:
<!-- ##### MACRO GST_PROPS_LIST ##### -->
@ -65,19 +66,12 @@ Construct a fourcc property out of four bytes.
</para>
@a: first byte
<!-- # Unused Parameters # -->
@b: second byte
@c: third byte
@d: fourth byte
<!-- ##### MACRO GST_PROPS_FOURCC_INT ##### -->
<para>
Create a fourcc property out of an integer value.
</para>
@a: the integer value
<!-- ##### MACRO GST_PROPS_BOOLEAN ##### -->
<para>
Create a boolean property.
@ -86,23 +80,29 @@ Create a boolean property.
@a: the boolean property
<!-- ##### FUNCTION gst_props_register ##### -->
<!-- ##### MACRO GST_PROPS_STRING ##### -->
<para>
</para>
@factory:
@Returns:
@a:
<!-- ##### FUNCTION gst_props_register_count ##### -->
<!-- ##### MACRO GST_PROPS_FLOAT ##### -->
<para>
</para>
@factory:
@counter:
@Returns:
@a:
<!-- ##### MACRO GST_PROPS_FLOAT_RANGE ##### -->
<para>
</para>
@a:
@b:
<!-- ##### FUNCTION gst_props_new ##### -->
@ -110,9 +110,21 @@ Create a boolean property.
</para>
@entry:
@firstname:
@Varargs:
@Returns:
<!-- # Unused Parameters # -->
@entry:
<!-- ##### FUNCTION gst_props_newv ##### -->
<para>
</para>
@firstname:
@var_args:
@Returns:
<!-- ##### FUNCTION gst_props_merge ##### -->
@ -125,6 +137,48 @@ Create a boolean property.
@Returns:
<!-- ##### FUNCTION gst_props_copy ##### -->
<para>
</para>
@props:
@Returns:
<!-- ##### FUNCTION gst_props_copy_on_write ##### -->
<para>
</para>
@props:
@Returns:
<!-- ##### FUNCTION gst_props_destroy ##### -->
<para>
</para>
@props:
<!-- ##### FUNCTION gst_props_ref ##### -->
<para>
</para>
@props:
<!-- ##### FUNCTION gst_props_unref ##### -->
<para>
</para>
@props:
<!-- ##### FUNCTION gst_props_check_compatibility ##### -->
<para>
@ -138,6 +192,60 @@ Create a boolean property.
@props2:
<!-- ##### FUNCTION gst_props_set ##### -->
<para>
</para>
@props:
@name:
@Varargs:
@Returns:
<!-- # Unused Parameters # -->
@entry:
@value:
<!-- ##### FUNCTION gst_props_get_boolean ##### -->
<para>
</para>
@props:
@name:
@Returns:
<!-- ##### FUNCTION gst_props_get_fourcc_int ##### -->
<para>
</para>
@props:
@name:
@Returns:
<!-- ##### FUNCTION gst_props_get_int ##### -->
<para>
</para>
@props:
@name:
@Returns:
<!-- ##### FUNCTION gst_props_get_string ##### -->
<para>
</para>
@props:
@name:
@Returns:
<!-- ##### FUNCTION gst_props_save_thyself ##### -->
<para>

File diff suppressed because it is too large Load diff

View file

@ -24,13 +24,23 @@ The volume as a double 0.0 is silent, 1.0 is loudest.
The format ad defined in soundcard.h
</para>
<!-- ##### ARG GstSineSrc:channels ##### -->
<!-- ##### ARG GstSineSrc:samplerate ##### -->
<para>
The number of channels.
</para>
<!-- ##### ARG GstSineSrc:frequency ##### -->
<!-- ##### ARG GstSineSrc:tablesize ##### -->
<para>
The fequency.
</para>
<!-- ##### ARG GstSineSrc:freq ##### -->
<para>
The frequency.
</para>
<!-- ##### ARG GstSineSrc:buffersize ##### -->
<para>
</para>

View file

@ -0,0 +1,17 @@
<!-- ##### SECTION Title ##### -->
GstStaticAutoplug
<!-- ##### SECTION Short_Description ##### -->
A static autoplugger.
<!-- ##### SECTION Long_Description ##### -->
<para>
This autoplugger will create a non threaded element before running the
pipeline.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>

View file

@ -0,0 +1,17 @@
<!-- ##### SECTION Title ##### -->
GstStaticAutoplugRender
<!-- ##### SECTION Short_Description ##### -->
An autoplugger made for media playback
<!-- ##### SECTION Long_Description ##### -->
<para>
this autoplugger will create a threaded element that can be used
in media players.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>

View file

@ -14,6 +14,16 @@ Some convenience functions
</para>
<!-- ##### FUNCTION gst_util_set_object_arg ##### -->
<para>
</para>
@object:
@name:
@value:
<!-- ##### FUNCTION gst_util_get_int_arg ##### -->
<para>

View file

@ -1,64 +0,0 @@
<!-- ##### SECTION Title ##### -->
videoraw
<!-- ##### SECTION Short_Description ##### -->
Information about video buffers.
<!-- ##### SECTION Long_Description ##### -->
<para>
Information about video buffers.
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### STRUCT MetaVideoRaw ##### -->
<para>
</para>
@meta:
@format:
@visual:
@width:
@height:
@overlay_info:
@dga_info:
<!-- ##### STRUCT MetaDGA ##### -->
<para>
</para>
@base:
@swidth:
@sheight:
@bytes_per_line:
<!-- ##### STRUCT MetaOverlay ##### -->
<para>
</para>
@wx:
@wy:
@overlay_element:
@clip_count:
@overlay_clip:
@width:
@height:
@did_overlay:
@fully_obscured:
<!-- ##### STRUCT OverlayClip ##### -->
<para>
</para>
@x1:
@x2:
@y1:
@y2:

View file

@ -1,6 +1,5 @@
Makefile
Makefile.in
tmpl
html
sgml
gstreamer-libs-unused.txt

View file

@ -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 \

View file

@ -110,7 +110,7 @@
while (elements) {
GstElement *element = GST_ELEMENT (elements-&gt;data);
g_print ("element in bin: %s\n", gst_element_get_name (element));
g_print ("element in bin: &percnt;s\n", gst_element_get_name (element));
elements = g_list_next (elements);
}

View 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>

View file

@ -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 &percnt;s was created\n", gst_pad_get_name (pad));
gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PAUSED);

View file

@ -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;

View file

@ -38,7 +38,7 @@ main (int argc, char *argv[])
gst_init(&amp;argc, &amp;argv);
if (argc != 2) {
g_print ("usage: %s &lt;filename&gt;n", argv[0]);
g_print ("usage: &percnt;s &lt;filename&gt;n", argv[0]);
exit (-1);
}

View file

@ -41,7 +41,7 @@ main (int argc, char *argv[])
GstElement *pipeline;
if (argc != 2) {
g_print ("usage: %s &lt;filename&gt;\n", argv[0]);
g_print ("usage: &percnt;s &lt;filename&gt;\n", argv[0]);
exit (-1);
}

View file

@ -34,7 +34,7 @@
while (pads) {
GstPad *pad = GST_PAD (pads-&gt;data);
g_print ("pad name %s\n", gst_pad_get_name (pad));
g_print ("pad name &percnt;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 &percnt;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 &percnt;s\n", gst_pad_get_name (pad));
while (caps) {
GstCaps *cap = (GstCaps *) caps-&gt;data;
g_print (" Capability name %s, MIME type\n", gst_caps_get_name (cap),
g_print (" Capability name &percnt;s, MIME type\n", gst_caps_get_name (cap),
gst_caps_get_mime (cap));
caps = g_list_next (caps);

View file

@ -15,6 +15,11 @@
one or more typedefinitions
</para>
</listitem>
<listitem>
<para>
one or more autopluggers
</para>
</listitem>
</itemizedlist>
<para>
The plugins have one simple method: plugin_init () where all the elementfactories are
@ -39,6 +44,8 @@ struct _GstPlugin {
gint numtypes;
GList *elements; /* list of elements provided */
gint numelements;
GList *autopluggers; /* list of autopluggers provided */
gint numautopluggers;
gboolean loaded; /* if the plugin is in memory */
};
@ -55,7 +62,7 @@ struct _GstPlugin {
while (plugins) {
GstPlugin *plugin = (GstPlugin *)plugins-&gt;data;
g_print ("plugin: %s\n", gst_plugin_get_name (plugin));
g_print ("plugin: &percnt;s\n", gst_plugin_get_name (plugin));
plugins = g_list_next (plugins);
}

View file

@ -66,7 +66,7 @@ main (int argc, char *argv[])
gst_init (&amp;argc,&amp;argv);
if (argc != 2) {
g_print ("usage: %s &lt;filename&gt;\n", argv[0]);
g_print ("usage: &percnt;s &lt;filename&gt;\n", argv[0]);
exit (-1);
}

View file

@ -11,6 +11,26 @@
</para>
<variablelist>
<varlistentry>
<term>16 Feb 2001</term>
<listitem>
<para>
<emphasis>wtay:</emphasis>
I shipped a few commerical products to &gt;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>

View file

@ -77,7 +77,7 @@ main (int argc, char *argv[])
GstElement *thread;
if (argc != 2) {
g_print ("usage: %s &lt;filename&gt;\n", argv[0]);
g_print ("usage: &percnt;s &lt;filename&gt;\n", argv[0]);
exit (-1);
}

View file

@ -3,7 +3,7 @@
<para>
Sometimes the capabilities of a pad are not specificied. The disksrc, for
example, does not know what type of file it is reading. Before you can attach
and element to the pad of the disksrc, you need to determine the media type in
an element to the pad of the disksrc, you need to determine the media type in
order to be able to choose a compatible element.
</para>
<para>
@ -64,7 +64,7 @@ main(int argc, char *argv[])
gst_init(&amp;argc,&amp;argv);
if (argc != 2) {
g_print("usage: %s &lt;filename&gt;\n", argv[0]);
g_print("usage: &percnt;s &lt;filename&gt;\n", argv[0]);
exit(-1);
}

View file

@ -38,7 +38,7 @@ main (int argc, char *argv[])
gst_init (&amp;argc,&amp;argv);
if (argc != 2) {
g_print ("usage: %s &lt;filename&gt;\n", argv[0]);
g_print ("usage: &percnt;s &lt;filename&gt;\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 &lt;stdlib.h&gt;
#include &lt;gst/gst.h&gt;
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 (&amp;argc, &amp;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>
...
&lt;gst:element&gt;
&lt;gst:name&gt;thread&lt;/gst:name&gt;
&lt;gst:type&gt;thread&lt;/gst:type&gt;
&lt;gst:version&gt;0.1.0&lt;/gst:version&gt;
...
&lt;/gst:children&gt;
&lt;test:comment&gt;
&lt;test:text&gt;decoder thread&lt;/test:text&gt;
&lt;/test:comment&gt;
&lt;/gst:element&gt;
...
</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-&gt;xmlChildrenNode;
while (children) {
if (!strcmp (children-&gt;name, "comment")) {
xmlNodePtr nodes = children-&gt;xmlChildrenNode;
while (nodes) {
if (!strcmp (nodes-&gt;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-&gt;next;
}
}
children = children-&gt;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>

View file

@ -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)

View file

@ -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);

View file

@ -14,8 +14,3 @@ Ac3Parse
</para>
<!-- ##### ARG Ac3Parse:skip ##### -->
<para>
</para>

Some files were not shown because too many files have changed in this diff Show more