Imported Upstream version 0.11.93
diff --git a/Makefile.am b/Makefile.am
index 9638883..0a9284f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -51,14 +51,22 @@
gst/udp/gstudp-enumtypes.c \
gst/udp/gstudp-enumtypes.h \
gst/rtpmanager/gstrtpbin-marshal.c \
- gst/rtpmanager/gstrtpbin-marshal.h ; do \
+ gst/rtpmanager/gstrtpbin-marshal.h \
+ sys/v4l2/tuner-enumtypes.c \
+ sys/v4l2/tuner-enumtypes.h \
+ sys/v4l2/tuner-marshal.c \
+ sys/v4l2/tuner-marshal.h; do \
cp $(top_builddir)/$$f win32/common; done
$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
- $(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
- $(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
cp $(top_builddir)/win32/common/config.h-new \
$(top_srcdir)/win32/common/config.h
diff --git a/Makefile.in b/Makefile.in
index ab69a8b..4d58934 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -257,7 +257,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -886,7 +888,7 @@
*.zip*) \
unzip $(distdir).zip ;;\
esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
+ chmod -R a-w $(distdir); chmod u+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
@@ -1173,14 +1175,22 @@
gst/udp/gstudp-enumtypes.c \
gst/udp/gstudp-enumtypes.h \
gst/rtpmanager/gstrtpbin-marshal.c \
- gst/rtpmanager/gstrtpbin-marshal.h ; do \
+ gst/rtpmanager/gstrtpbin-marshal.h \
+ sys/v4l2/tuner-enumtypes.c \
+ sys/v4l2/tuner-enumtypes.h \
+ sys/v4l2/tuner-marshal.c \
+ sys/v4l2/tuner-marshal.h; do \
cp $(top_builddir)/$$f win32/common; done
$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
$(top_srcdir)/common/gst-indent win32/common/gstudp-marshal.c
$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
$(top_srcdir)/common/gst-indent win32/common/gstudp-enumtypes.c
- $(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
- $(top_srcdir)/common/gst-indent gst/rtpmanager/gstrtpbin-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/gstrtpbin-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-enumtypes.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
+ $(top_srcdir)/common/gst-indent win32/common/tuner-marshal.c
cp $(top_builddir)/win32/common/config.h-new \
$(top_srcdir)/win32/common/config.h
.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload
diff --git a/aclocal.m4 b/aclocal.m4
index 64a643a..a65bacf 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
@@ -38,7 +38,7 @@
[am__api_version='1.11'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.11.5], [],
+m4_if([$1], [1.11.6], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -54,7 +54,7 @@
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.5])dnl
+[AM_AUTOMAKE_VERSION([1.11.6])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
diff --git a/common/Makefile.in b/common/Makefile.in
index 54ba879..a632276 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -220,7 +220,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/common/gst-glib-gen.mak b/common/gst-glib-gen.mak
index cc82bbd..0b0a5e9 100644
--- a/common/gst-glib-gen.mak
+++ b/common/gst-glib-gen.mak
@@ -10,16 +10,16 @@
# these are all the rules generating the relevant files
$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
- $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
- glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+ $(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
--fprod "\n/* enumerations from \"@filename@\" */\n" \
--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
@@ -28,7 +28,7 @@
$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
--fprod "\n/* enumerations from \"@filename@\" */" \
--vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 0339945..88752cb 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -180,7 +180,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4
index ff0954a..077a20b 100644
--- a/common/m4/gst-arch.m4
+++ b/common/m4/gst-arch.m4
@@ -5,9 +5,6 @@
AC_DEFUN([AG_GST_ARCH],
[
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
- AC_REQUIRE([AC_CANONICAL_TARGET]) dnl we use target_ variables
-
dnl Determine CPU
case "x${target_cpu}" in
xi?86 | xk? | xi?86_64)
diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
index b141bee..3f3d565 100644
--- a/common/m4/gst-glib2.m4
+++ b/common/m4/gst-glib2.m4
@@ -68,6 +68,44 @@
GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
fi
+ dnl Find location of glib utils. People may want to or have to override these,
+ dnl e.g. in a cross-compile situation where PATH is a bit messed up. We need
+ dnl for these tools to work on the host, so can't just use the one from the
+ dnl GLib installation that pkg-config picks up, as that might be for a
+ dnl different target architecture.
+ dnl
+ dnl glib-genmarshal:
+ AC_MSG_CHECKING(for glib-genmarshal)
+ if test "x$GLIB_GENMARSHAL" != "x"; then
+ AC_MSG_RESULT([$GLIB_GENMARSHAL (from environment)])
+ else
+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+ if $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+ AC_MSG_RESULT([$GLIB_GENMARSHAL (from pkg-config path)])
+ else
+ AC_PATH_PROG(GLIB_GENMARSHAL, [glib-genmarshal], [glib-genmarshal])
+ AC_MSG_RESULT([$GLIB_GENMARSHAL])
+ fi
+ fi
+ if ! $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+ AC_MSG_WARN([$GLIB_GENMARSHAL does not seem to work!])
+ fi
+ AC_SUBST(GLIB_GENMARSHAL)
+
+ dnl glib-mkenums:
+ AC_MSG_CHECKING(for glib-mkenums)
+ if test "x$GLIB_MKENUMS" != "x"; then
+ AC_MSG_RESULT([$GLIB_MKENUMS (from environment)])
+ else
+ dnl glib-mkenums is written in perl so should always work really
+ GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+ AC_MSG_RESULT([$GLIB_MKENUMS])
+ fi
+ if ! $GLIB_MKENUMS --version 2>/dev/null >/dev/null; then
+ AC_MSG_WARN([$GLIB_MKENUMS does not seem to work!])
+ fi
+ AC_SUBST(GLIB_MKENUMS)
+
dnl for the poor souls who for example have glib in /usr/local
AS_SCRUB_INCLUDE(GLIB_CFLAGS)
diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4
index 2cae45d..710da89 100644
--- a/common/m4/gst-parser.m4
+++ b/common/m4/gst-parser.m4
@@ -34,7 +34,7 @@
dnl we need version >= 2.5.31 for the reentrancy support
dnl in the parser.
flex_min_version=2.5.31
- flex_version=`$FLEX_PATH --version | head -n 1 | sed 's/^.* //' | sed 's/[[a-zA-Z]]*$//' | cut -d' ' -f1`
+ flex_version=`$FLEX_PATH --version | head -n 1 | awk '{print $2}'`
AC_MSG_CHECKING([flex version $flex_version >= $flex_min_version])
if perl -w <<EOF
(\$min_version_major, \$min_version_minor, \$min_version_micro ) = "$flex_min_version" =~ /(\d+)\.(\d+)\.(\d+)/;
diff --git a/common/m4/gst.m4 b/common/m4/gst.m4
index ddfde51..d4c53cb 100644
--- a/common/m4/gst.m4
+++ b/common/m4/gst.m4
@@ -3,10 +3,15 @@
dnl all GStreamer autoconf macros are prefixed
dnl with AG_GST_ for public macros
dnl with _AG_GST_ for private macros
+dnl
+dnl We call AC_CANONICAL_TARGET and AC_CANONICAL_HOST so that
+dnl it is valid before AC_ARG_PROGRAM is called
AC_DEFUN([AG_GST_INIT],
[
m4_pattern_forbid(^_?AG_GST_)
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
+ AC_REQUIRE([AC_CANONICAL_TARGET]) dnl we use target_ variables
])
dnl AG_GST_PKG_CONFIG_PATH
diff --git a/compile b/compile
index b1f4749..862a14e 100755
--- a/compile
+++ b/compile
@@ -1,7 +1,7 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
-scriptversion=2012-01-04.17; # UTC
+scriptversion=2012-03-05.13; # UTC
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
# Software Foundation, Inc.
@@ -79,6 +79,48 @@
esac
}
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
@@ -109,43 +151,34 @@
;;
esac
;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
- -l*)
- lib=${1#-l}
- found=no
- save_IFS=$IFS
- IFS=';'
- for dir in $lib_path $LIB
- do
- IFS=$save_IFS
- if $shared && test -f "$dir/$lib.dll.lib"; then
- found=yes
- set x "$@" "$dir/$lib.dll.lib"
- break
- fi
- if test -f "$dir/$lib.lib"; then
- found=yes
- set x "$@" "$dir/$lib.lib"
- break
- fi
- done
- IFS=$save_IFS
-
- test "$found" != yes && set x "$@" "$lib.lib"
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
shift
;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
-L*)
- func_file_conv "${1#-L}"
- if test -z "$lib_path"; then
- lib_path=$file
- else
- lib_path="$lib_path;$file"
- fi
- linker_opts="$linker_opts -LIBPATH:$file"
+ func_cl_dashL "${1#-L}"
;;
-static)
shared=false
diff --git a/config.sub b/config.sub
index c894da4..6205f84 100755
--- a/config.sub
+++ b/config.sub
@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2012-02-10'
+timestamp='2012-04-18'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -225,6 +225,12 @@
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
-lynx*)
os=-lynxos
;;
@@ -1537,6 +1543,9 @@
c4x-* | tic4x-*)
os=-coff
;;
+ hexagon-*)
+ os=-elf
+ ;;
tic54x-*)
os=-coff
;;
diff --git a/configure b/configure
index 46a9ac2..44dc827 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 0.11.92.
+# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 0.11.93.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@
# Identity of this package.
PACKAGE_NAME='GStreamer Good Plug-ins'
PACKAGE_TARNAME='gst-plugins-good'
-PACKAGE_VERSION='0.11.92'
-PACKAGE_STRING='GStreamer Good Plug-ins 0.11.92'
+PACKAGE_VERSION='0.11.93'
+PACKAGE_STRING='GStreamer Good Plug-ins 0.11.93'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -921,6 +921,8 @@
GIO_LIBS
GIO_CFLAGS
GLIB_EXTRA_CFLAGS
+GLIB_MKENUMS
+GLIB_GENMARSHAL
GLIB_LIBS
GLIB_CFLAGS
GLIB_REQ
@@ -1004,10 +1006,6 @@
HAVE_CPU_PPC_TRUE
HAVE_CPU_I386_FALSE
HAVE_CPU_I386_TRUE
-target_os
-target_vendor
-target_cpu
-target
BUILD_EXPERIMENTAL_FALSE
BUILD_EXPERIMENTAL_TRUE
USE_EXPERIMENTAL_FALSE
@@ -1104,14 +1102,6 @@
AM_DEFAULT_VERBOSITY
AM_DEFAULT_V
AM_V
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
MAINT
MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE
@@ -1143,6 +1133,18 @@
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
target_alias
host_alias
build_alias
@@ -1221,7 +1223,6 @@
enable_gobject_cast_checks
enable_glib_asserts
enable_orc
-with_gtk
with_default_audiosink
with_default_audiosrc
with_default_videosink
@@ -1936,7 +1937,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures GStreamer Good Plug-ins 0.11.92 to adapt to many kinds of systems.
+\`configure' configures GStreamer Good Plug-ins 0.11.93 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2012,7 +2013,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Good Plug-ins 0.11.92:";;
+ short | recursive ) echo "Configuration of GStreamer Good Plug-ins 0.11.93:";;
esac
cat <<\_ACEOF
@@ -2152,7 +2153,6 @@
--with-plugins comma-separated list of dependencyless plug-ins to
compile
--with-html-dir=PATH path to installed docs
- --with-gtk=3.0|2.0 which gtk+ version to compile against (default: 2.0)
--with-default-audiosink
specify default audio sink
--with-default-audiosrc specify default audio source
@@ -2369,7 +2369,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Good Plug-ins configure 0.11.92
+GStreamer Good Plug-ins configure 0.11.93
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3180,7 +3180,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GStreamer Good Plug-ins $as_me 0.11.92, which was
+It was created by GStreamer Good Plug-ins $as_me 0.11.93, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3533,12 +3533,6 @@
-
-
-
-
-am__api_version='1.11'
-
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
if test -f "$ac_dir/install-sh"; then
@@ -3568,6 +3562,122 @@
ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if ${ac_cv_target+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+
+
+am__api_version='1.11'
+
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@@ -4004,7 +4114,7 @@
# Define the identity of the package.
PACKAGE='gst-plugins-good'
- VERSION='0.11.92'
+ VERSION='0.11.93'
cat >>confdefs.h <<_ACEOF
@@ -4127,9 +4237,9 @@
- PACKAGE_VERSION_MAJOR=$(echo 0.11.92 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 0.11.92 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 0.11.92 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 0.11.93 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 0.11.93 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 0.11.93 | cut -d'.' -f3)
@@ -4140,7 +4250,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 0.11.92 | cut -d'.' -f4)
+ NANO=$(echo 0.11.93 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -4192,76 +4302,6 @@
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
# Check whether --enable-silent-rules was given.
@@ -6511,10 +6551,6 @@
fi
;;
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
haiku*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -6553,7 +6589,7 @@
;;
# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -9791,7 +9827,7 @@
lt_prog_compiler_static='-non_shared'
;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
# old Intel for x86_64 which still supported -KPIC.
ecc*)
@@ -11961,17 +11997,6 @@
esac
;;
-gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
haiku*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
@@ -12088,7 +12113,7 @@
;;
# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
@@ -13136,8 +13161,8 @@
-GST_REQ=0.11.91
-GSTPB_REQ=0.11.91
+GST_REQ=0.11.93
+GSTPB_REQ=0.11.93
@@ -15863,46 +15888,6 @@
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if ${ac_cv_target+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$target_alias" = x; then
- ac_cv_target=$ac_cv_host
-else
- ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
-case $ac_cv_target in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
-esac
-target=$ac_cv_target
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_target
-shift
-target_cpu=$1
-target_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-target_os=$*
-IFS=$ac_save_IFS
-case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
- test "$program_prefix$program_suffix$program_transform_name" = \
- NONENONEs,x,x, &&
- program_prefix=${target_alias}-
-
case "x${target_cpu}" in
xi?86 | xk? | xi?86_64)
@@ -18749,9 +18734,6 @@
ld_shlibs_CXX=yes
;;
- gnu*)
- ;;
-
haiku*)
archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
link_all_deplibs_CXX=yes
@@ -18913,7 +18895,7 @@
inherit_rpath_CXX=yes
;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -19773,7 +19755,7 @@
;;
esac
;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
KCC*)
# KAI C++ Compiler
@@ -20645,17 +20627,6 @@
esac
;;
-gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
haiku*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
@@ -20772,7 +20743,7 @@
;;
# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
@@ -23755,7 +23726,7 @@
-GLIB_REQ=2.31.14
+GLIB_REQ=2.32.0
@@ -23912,6 +23883,84 @@
GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glib-genmarshal" >&5
+$as_echo_n "checking for glib-genmarshal... " >&6; }
+ if test "x$GLIB_GENMARSHAL" != "x"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL (from environment)" >&5
+$as_echo "$GLIB_GENMARSHAL (from environment)" >&6; }
+ else
+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+ if $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL (from pkg-config path)" >&5
+$as_echo "$GLIB_GENMARSHAL (from pkg-config path)" >&6; }
+ else
+ # Extract the first word of "glib-genmarshal", so it can be a program name with args.
+set dummy glib-genmarshal; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GLIB_GENMARSHAL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GLIB_GENMARSHAL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GLIB_GENMARSHAL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GLIB_GENMARSHAL" && ac_cv_path_GLIB_GENMARSHAL="glib-genmarshal"
+ ;;
+esac
+fi
+GLIB_GENMARSHAL=$ac_cv_path_GLIB_GENMARSHAL
+if test -n "$GLIB_GENMARSHAL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+ fi
+ fi
+ if ! $GLIB_GENMARSHAL --version 2>/dev/null >/dev/null; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $GLIB_GENMARSHAL does not seem to work!" >&5
+$as_echo "$as_me: WARNING: $GLIB_GENMARSHAL does not seem to work!" >&2;}
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glib-mkenums" >&5
+$as_echo_n "checking for glib-mkenums... " >&6; }
+ if test "x$GLIB_MKENUMS" != "x"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS (from environment)" >&5
+$as_echo "$GLIB_MKENUMS (from environment)" >&6; }
+ else
+ GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5
+$as_echo "$GLIB_MKENUMS" >&6; }
+ fi
+ if ! $GLIB_MKENUMS --version 2>/dev/null >/dev/null; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $GLIB_MKENUMS does not seem to work!" >&5
+$as_echo "$as_me: WARNING: $GLIB_MKENUMS does not seem to work!" >&2;}
+ fi
+
+
GIVEN_CFLAGS=$GLIB_CFLAGS
INCLUDE_DIRS=`echo | cpp -v 2>&1`
@@ -24037,7 +24086,7 @@
- ORC_REQ=0.4.11
+ ORC_REQ=0.4.16
# Check whether --enable-orc was given.
if test "${enable_orc+set}" = set; then :
@@ -24867,26 +24916,8 @@
HAVE_GTK=no
-GTK2_REQ=2.14.0
-GTK3_REQ=2.91.3
+GT_REQ=3.0.0
if test "x$BUILD_EXAMPLES" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking which gtk+ version to compile examples against (optional)" >&5
-$as_echo_n "checking which gtk+ version to compile examples against (optional)... " >&6; }
-
-# Check whether --with-gtk was given.
-if test "${with_gtk+set}" = set; then :
- withval=$with_gtk; case "$with_gtk" in
- 2.0) GTK_REQ=$GTK2_REQ ;;
- 3.0) GTK_REQ=$GTK3_REQ ;;
- *) as_fn_error $? "invalid gtk+ version specified" "$LINENO" 5;;
- esac
-else
- with_gtk=2.0
- GTK_REQ=$GTK2_REQ
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gtk (>= $GTK_REQ)" >&5
-$as_echo "$with_gtk (>= $GTK_REQ)" >&6; }
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
@@ -26705,9 +26736,7 @@
-GST_PLUGINS_NONPORTED="deinterlace \
- cairo cairo_gobject gdk_pixbuf \
- osx_audio "
+GST_PLUGINS_NONPORTED="cairo cairo_gobject gdk_pixbuf osx_audio "
@@ -34464,12 +34493,12 @@
pkg_cv_SOUP_CFLAGS="$SOUP_CFLAGS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26" 2>/dev/null`
+ pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -34482,12 +34511,12 @@
pkg_cv_SOUP_LIBS="$SOUP_LIBS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26" 2>/dev/null`
+ pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -34506,9 +34535,9 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+ SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
else
- SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+ SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
fi
# Put the nasty error message in config.log where it belongs
echo "$SOUP_PKG_ERRORS" >&5
@@ -34542,12 +34571,12 @@
pkg_cv_SOUP_CFLAGS="$SOUP_CFLAGS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26" 2>/dev/null`
+ pkg_cv_SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4 >= 2.26.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -34560,12 +34589,12 @@
pkg_cv_SOUP_LIBS="$SOUP_LIBS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsoup-2.4 >= 2.26.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libsoup-2.4 >= 2.26.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26" 2>/dev/null`
+ pkg_cv_SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4 >= 2.26.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -34584,9 +34613,9 @@
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+ SOUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
else
- SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26"`
+ SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4 >= 2.26.1"`
fi
# Put the nasty error message in config.log where it belongs
echo "$SOUP_PKG_ERRORS" >&5
@@ -37325,7 +37354,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by GStreamer Good Plug-ins $as_me 0.11.92, which was
+This file was extended by GStreamer Good Plug-ins $as_me 0.11.93, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -37391,7 +37420,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-GStreamer Good Plug-ins config.status 0.11.92
+GStreamer Good Plug-ins config.status 0.11.93
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 7aa6543..b957f7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
dnl initialize autoconf
dnl releases only do -Wall, git and prerelease does -Werror too
dnl use a three digit version number for releases, and four for git/pre
-AC_INIT(GStreamer Good Plug-ins, 0.11.92,
+AC_INIT(GStreamer Good Plug-ins, 0.11.93,
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
gst-plugins-good)
@@ -48,8 +48,8 @@
AS_LIBTOOL(GST, 0, 0, 0)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=0.11.91
-GSTPB_REQ=0.11.91
+GST_REQ=0.11.93
+GSTPB_REQ=0.11.93
dnl *** autotools stuff ****
@@ -198,11 +198,11 @@
dnl GLib
-GLIB_REQ=2.31.14
+GLIB_REQ=2.32.0
AG_GST_GLIB_CHECK([$GLIB_REQ])
dnl Orc
-ORC_CHECK([0.4.11])
+ORC_CHECK([0.4.16])
dnl checks for gstreamer
dnl uninstalled is selected preferentially -- see pkg-config(1)
@@ -234,21 +234,8 @@
dnl GTK is optional and used in examples
HAVE_GTK=no
-GTK2_REQ=2.14.0
-GTK3_REQ=2.91.3
+GT_REQ=3.0.0
if test "x$BUILD_EXAMPLES" = "xyes"; then
- AC_MSG_CHECKING([which gtk+ version to compile examples against (optional)])
- AC_ARG_WITH([gtk],
- AC_HELP_STRING([--with-gtk=3.0|2.0],
- [which gtk+ version to compile against (default: 2.0)]),
- [case "$with_gtk" in
- 2.0) GTK_REQ=$GTK2_REQ ;;
- 3.0) GTK_REQ=$GTK3_REQ ;;
- *) AC_MSG_ERROR([invalid gtk+ version specified]);;
- esac],
- [with_gtk=2.0
- GTK_REQ=$GTK2_REQ])
- AC_MSG_RESULT([$with_gtk (>= $GTK_REQ)])
PKG_CHECK_MODULES(GTK, gtk+-$with_gtk >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no)
dnl some examples need gtk+-x11
PKG_CHECK_MODULES(GTK_X11, gtk+-x11-$with_gtk >= $GTK_REQ, HAVE_GTK_X11=yes, HAVE_GTK_X11=no)
@@ -310,9 +297,7 @@
dnl Non ported plugins (non-dependant, then dependant)
dnl Make sure you have a space before and after all plugins
-GST_PLUGINS_NONPORTED="deinterlace \
- cairo cairo_gobject gdk_pixbuf \
- osx_audio "
+GST_PLUGINS_NONPORTED="cairo cairo_gobject gdk_pixbuf osx_audio "
AC_SUBST(GST_PLUGINS_NONPORTED)
dnl these are all the gst plug-ins, compilable without additional libs
@@ -843,7 +828,7 @@
HAVE_SOUP="yes"
AC_DEFINE(HAVE_LIBSOUP_GNOME, 1, [soup gnome integration])
],[
- PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.26, HAVE_SOUP="yes", [
+ PKG_CHECK_MODULES(SOUP, libsoup-2.4 >= 2.26.1, HAVE_SOUP="yes", [
HAVE_SOUP="no"
])
])
diff --git a/depcomp b/depcomp
index bd0ac08..25a39e6 100755
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,10 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2011-12-04.11; # UTC
+scriptversion=2012-03-27.16; # UTC
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
-# 2011 Free Software Foundation, Inc.
+# 2011, 2012 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@
case $1 in
'')
- echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
@@ -40,8 +40,8 @@
Environment variables:
depmode Dependency tracking mode.
- source Source file read by `PROGRAMS ARGS'.
- object Object file output by `PROGRAMS ARGS'.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputting dependencies.
@@ -57,6 +57,12 @@
;;
esac
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
@@ -102,6 +108,12 @@
depmode=msvc7
fi
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
@@ -156,15 +168,14 @@
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
- tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'. On the theory
+ tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'. On the theory
## that the space means something, we add a space to the output as
## well. hp depmode also adds that space, but also prefixes the VPATH
## to the object. Take care to not repeat it in the output.
@@ -203,18 +214,15 @@
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
- # the IRIX cc adds comments like `#:fec' to the end of the
+ # the IRIX cc adds comments like '#:fec' to the end of the
# dependency line.
- tr ' ' '
-' < "$tmpdepfile" \
+ tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
- tr '
-' ' ' >> "$depfile"
+ tr "$nl" ' ' >> "$depfile"
echo >> "$depfile"
# The second pass generates a dummy entry for each header file.
- tr ' ' '
-' < "$tmpdepfile" \
+ tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> "$depfile"
else
@@ -226,10 +234,17 @@
rm -f "$tmpdepfile"
;;
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
- # current directory. Also, the AIX compiler puts `$object:' at the
+ # current directory. Also, the AIX compiler puts '$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
@@ -259,12 +274,11 @@
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
- # Each line is of the form `foo.o: dependent.h'.
+ # Each line is of the form 'foo.o: dependent.h'.
# Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
+ # '$object: dependent.h' and one to simply 'dependent.h:'.
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
@@ -275,23 +289,26 @@
;;
icc)
- # Intel's C compiler understands `-MD -MF file'. However on
- # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+ # However on
+ # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
- # which is wrong. We want:
+ # which is wrong. We want
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
- # and will wrap long lines using \ :
+ # and will wrap long lines using '\':
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
-
+ # tcc 0.9.26 (FIXME still under development at the moment of writing)
+ # will emit a similar output, but also prepend the continuation lines
+ # with horizontal tabulation characters.
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
@@ -300,15 +317,21 @@
exit $stat
fi
rm -f "$depfile"
- # Each line is of the form `foo.o: dependent.h',
- # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Each line is of the form 'foo.o: dependent.h',
+ # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
# Do two passes, one to just change these to
- # `$object: dependent.h' and one to simply `dependent.h:'.
- sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
- # Some versions of the HPUX 10.20 sed can't process this invocation
- # correctly. Breaking it into two sed invocations is a workaround.
- sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
- sed -e 's/$/ :/' >> "$depfile"
+ # '$object: dependent.h' and one to simply 'dependent.h:'.
+ sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
+ < "$tmpdepfile" > "$depfile"
+ sed '
+ s/[ '"$tab"'][ '"$tab"']*/ /g
+ s/^ *//
+ s/ *\\*$//
+ s/^[^:]*: *//
+ /^$/d
+ /:$/d
+ s/$/ :/
+ ' < "$tmpdepfile" >> "$depfile"
rm -f "$tmpdepfile"
;;
@@ -344,7 +367,7 @@
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
- # Add `dependent.h:' lines.
+ # Add 'dependent.h:' lines.
sed -ne '2,${
s/^ *//
s/ \\*$//
@@ -359,9 +382,9 @@
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
- # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
- # dependencies in `foo.d' instead, so we check for that too.
+ # dependencies in 'foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
@@ -407,8 +430,7 @@
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
- # That's a tab and a space in the [].
- sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
@@ -443,11 +465,11 @@
p
}' | $cygpath_u | sort -u | sed -n '
s/ /\\ /g
-s/\(.*\)/ \1 \\/p
+s/\(.*\)/'"$tab"'\1 \\/p
s/.\(.*\) \\/\1:/
H
$ {
- s/.*/ /
+ s/.*/'"$tab"'/
G
p
}' >> "$depfile"
@@ -478,7 +500,7 @@
shift
fi
- # Remove `-o $object'.
+ # Remove '-o $object'.
IFS=" "
for arg
do
@@ -498,15 +520,14 @@
done
test -z "$dashmflag" && dashmflag=-M
- # Require at least two characters before searching for `:'
+ # Require at least two characters before searching for ':'
# in the target name. This is to cope with DOS-style filenames:
- # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
"$@" $dashmflag |
- sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
- tr ' ' '
-' < "$tmpdepfile" | \
+ tr ' ' "$nl" < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -562,8 +583,7 @@
# makedepend may prepend the VPATH from the source file name to the object.
# No need to regex-escape $object, excess matching of '.' is harmless.
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
- sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
+ sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -583,7 +603,7 @@
shift
fi
- # Remove `-o $object'.
+ # Remove '-o $object'.
IFS=" "
for arg
do
@@ -652,8 +672,8 @@
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
- sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
- echo " " >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 9b826c4..4b58d2e 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -220,7 +220,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index c73bb1d..da2a718 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -199,7 +199,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index f36f651..36febcc 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp281824"></a>gst-plugins-good Elements</h2></div></div></div>
+<a name="idp180256"></a>gst-plugins-good Elements</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gst-plugins-good-plugins-3gppmux.html">3gppmux</a></span><span class="refpurpose"> — Muxer for 3GPP (.3gp) files</span>
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index cae3ad9..1234a84 100644
--- a/docs/plugins/html/ch02.html
+++ b/docs/plugins/html/ch02.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp5378064"></a>gst-plugins-good Plugins</h2></div></div></div>
+<a name="idp5432704"></a>gst-plugins-good Plugins</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gst-plugins-good-plugins-plugin-1394.html">1394</a></span><span class="refpurpose"> — <a name="plugin-1394"></a>Source for video data via IEEE1394 interface</span>
diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html
index 9d9e775..18c4ce7 100644
--- a/docs/plugins/html/ch03.html
+++ b/docs/plugins/html/ch03.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp5413056"></a>gst-plugins-good Base Classes</h2></div></div></div>
+<a name="idp5467696"></a>gst-plugins-good Base Classes</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="GstIirEqualizer.html">GstIirEqualizer</a></span><span class="refpurpose"></span>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html b/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html
index fed32fb..d0bb4b0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-3gppmux.html
@@ -56,7 +56,7 @@
ISO 14496-12 (except for some media specific parts).
In turn, the latter ISO Base Media format was further specialized as a
Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
The fragmented file features defined (only) in ISO Base Media are used by
ISMV files making up (a.o.) Smooth Streaming (ismlmux).
</p>
@@ -96,13 +96,13 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8328720"></a><h3>Example pipelines</h3>
+<a name="idp6208480"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="listing_lines" align="right"><pre>1</pre></td>
- <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch v4l2src num<span class="gtkdoc opt">-</span>buffers<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> ffenc_h263 <span class="gtkdoc opt">!</span> gppmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>video<span class="number">.3</span>gp</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch v4l2src num<span class="gtkdoc opt">-</span>buffers<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> ffenc_h263 <span class="gtkdoc opt">!</span> <span class="number">3</span>gppmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>video<span class="number">.3</span>gp</pre></td>
</tr>
</tbody>
</table>
@@ -119,7 +119,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6518336"></a><h3>Element Information</h3>
+<a name="idp7337184"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -142,7 +142,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6229168"></a><h3>Element Pads</h3>
+<a name="idp6801616"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
index 9fc7ccb..4993ba8 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
@@ -66,7 +66,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9559600"></a><h3>Example launch line</h3>
+<a name="idm36816"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -84,7 +84,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6596800"></a><h3>Element Information</h3>
+<a name="idp8750912"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -107,7 +107,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7982560"></a><h3>Element Pads</h3>
+<a name="idp8802736"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-aasink.html
index 0ddc10c..547aa1b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aasink.html
@@ -86,7 +86,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8268384"></a><h3>Element Information</h3>
+<a name="idm31792"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -109,7 +109,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7952176"></a><h3>Element Pads</h3>
+<a name="idp7012192"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
index 808f2fd..94a41ae 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
@@ -61,7 +61,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9335856"></a><h3>Example launch line</h3>
+<a name="idp7867424"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6399376"></a><h3>Element Information</h3>
+<a name="idp8374016"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7492656"></a><h3>Element Pads</h3>
+<a name="idp6397712"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-agingtv.html b/docs/plugins/html/gst-plugins-good-plugins-agingtv.html
index 98d3a07..55163a0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-agingtv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-agingtv.html
@@ -74,7 +74,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9746128"></a><h3>Example launch line</h3>
+<a name="idp6010544"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5701344"></a><h3>Element Information</h3>
+<a name="idp9026096"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -115,7 +115,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9838144"></a><h3>Element Pads</h3>
+<a name="idp7914864"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alawdec.html b/docs/plugins/html/gst-plugins-good-plugins-alawdec.html
index f9b02d6..f831c11 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alawdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alawdec.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5919136"></a><h3>Element Information</h3>
+<a name="idp7081440"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9205920"></a><h3>Element Pads</h3>
+<a name="idp9270640"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alawenc.html b/docs/plugins/html/gst-plugins-good-plugins-alawenc.html
index a9488cd..7e9ebf6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alawenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alawenc.html
@@ -49,7 +49,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7084208"></a><h3>Element Information</h3>
+<a name="idp10540240"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -72,7 +72,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7973840"></a><h3>Element Pads</h3>
+<a name="idp7069712"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-alpha.html
index 1c3cf5a..ddadd28 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alpha.html
@@ -105,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6436096"></a><h3>Element Information</h3>
+<a name="idp7104224"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -130,7 +130,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10122416"></a><h3>Element Pads</h3>
+<a name="idp8954032"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html
index 4211126..a8b9552 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-alphacolor.html
@@ -82,7 +82,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5533136"></a><h3>Element Information</h3>
+<a name="idp7941184"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -105,7 +105,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9398432"></a><h3>Element Pads</h3>
+<a name="idp9874768"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
index 2256d3e..cb29a7d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
@@ -62,7 +62,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp7826944"></a><h3>Example launch line</h3>
+<a name="idp9300272"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8715728"></a><h3>Element Information</h3>
+<a name="idp6211120"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idm32288"></a><h3>Element Pads</h3>
+<a name="idp5694032"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -175,7 +175,7 @@
</div>
<div class="refsect1">
<a name="gst-plugins-good-plugins-amrparse.see-also"></a><h2>See Also</h2>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-ugly/html/gst-plugins-ugly-plugins-amrnbdec.html#GstAmrnbDec"><span class="type">GstAmrnbDec</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-ugly/html/gst-plugins-ugly-plugins-amrnbenc.html#GstAmrnbEnc"><span class="type">GstAmrnbEnc</span></a>
+<span class="type">GstAmrnbDec</span>, <span class="type">GstAmrnbEnc</span>
</div>
</div>
<div class="footer">
diff --git a/docs/plugins/html/gst-plugins-good-plugins-apedemux.html b/docs/plugins/html/gst-plugins-good-plugins-apedemux.html
index 05fa89b..0cdccb2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-apedemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-apedemux.html
@@ -72,7 +72,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9161520"></a><h3>Example launch line</h3>
+<a name="idp6139904"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8269344"></a><h3>Element Information</h3>
+<a name="idp8599248"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -115,7 +115,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7065776"></a><h3>Element Pads</h3>
+<a name="idp9243584"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html b/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html
index 06fa287..c682a38 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-apev2mux.html
@@ -66,7 +66,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5917840"></a><h3>Element Information</h3>
+<a name="idp6430144"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -89,7 +89,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6930672"></a><h3>Element Pads</h3>
+<a name="idp7787728"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html b/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html
index d0fca24..06a7beb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aspectratiocrop.html
@@ -81,7 +81,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8880032"></a><h3>Example launch line</h3>
+<a name="idp7151824"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10181968"></a><h3>Element Information</h3>
+<a name="idp8094240"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -122,7 +122,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8844816"></a><h3>Element Pads</h3>
+<a name="idp8295296"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html b/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html
index 5bbfaeb..46046dc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioamplify.html
@@ -72,7 +72,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9991504"></a><h3>Example launch line</h3>
+<a name="idp6603536"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8439776"></a><h3>Element Information</h3>
+<a name="idp9960256"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -117,7 +117,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8274080"></a><h3>Element Pads</h3>
+<a name="idp8943104"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html b/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html
index fd59c4d..df21000 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiochebband.html
@@ -103,7 +103,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8513472"></a><h3>Example launch line</h3>
+<a name="idp9953952"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -125,7 +125,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8843520"></a><h3>Element Information</h3>
+<a name="idp3032128"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -148,7 +148,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7544080"></a><h3>Element Pads</h3>
+<a name="idp9402576"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html b/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html
index 3549aae..3825855 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiocheblimit.html
@@ -100,7 +100,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp6782368"></a><h3>Example launch line</h3>
+<a name="idp10597408"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -122,7 +122,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8527136"></a><h3>Element Information</h3>
+<a name="idp9915776"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -145,7 +145,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7678736"></a><h3>Element Pads</h3>
+<a name="idp3247456"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html b/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html
index 527a4e6..1f30f9e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiodynamic.html
@@ -76,7 +76,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp10827520"></a><h3>Example launch line</h3>
+<a name="idp10382224"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9888192"></a><h3>Element Information</h3>
+<a name="idp8946464"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7949072"></a><h3>Element Pads</h3>
+<a name="idp8596896"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioecho.html b/docs/plugins/html/gst-plugins-good-plugins-audioecho.html
index 65117eb..ab363e6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioecho.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioecho.html
@@ -84,7 +84,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8803856"></a><h3>Example launch line</h3>
+<a name="idp8473856"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -104,7 +104,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8686672"></a><h3>Element Information</h3>
+<a name="idp9602064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -127,7 +127,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9744128"></a><h3>Element Pads</h3>
+<a name="idp7672608"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html b/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html
index 30ba431..470a8ac 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiofirfilter.html
@@ -95,7 +95,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11231552"></a><h3>Example application</h3>
+<a name="idp10441424"></a><h3>Example application</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -441,7 +441,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9528224"></a><h3>Element Information</h3>
+<a name="idp5885264"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -464,7 +464,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10238000"></a><h3>Element Pads</h3>
+<a name="idp10140592"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html b/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html
index 521f36d..80c7552 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioiirfilter.html
@@ -91,7 +91,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9177520"></a><h3>Example application</h3>
+<a name="idp9331104"></a><h3>Example application</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -389,7 +389,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2790368"></a><h3>Element Information</h3>
+<a name="idp10067568"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -412,7 +412,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6233376"></a><h3>Element Pads</h3>
+<a name="idp8333056"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html b/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html
index 18f430b..ca98bad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audioinvert.html
@@ -72,7 +72,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp10929664"></a><h3>Example launch line</h3>
+<a name="idp7039232"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8620496"></a><h3>Element Information</h3>
+<a name="idp6695536"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -117,7 +117,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7399888"></a><h3>Element Pads</h3>
+<a name="idp8506064"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html b/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html
index 0f64c20..7b94c24 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiokaraoke.html
@@ -74,7 +74,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp4884352"></a><h3>Example launch line</h3>
+<a name="idp10895824"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6238576"></a><h3>Element Information</h3>
+<a name="idp7677984"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -115,7 +115,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idm6320"></a><h3>Element Pads</h3>
+<a name="idp11370864"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html b/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html
index a4d0e41..5095b99 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiopanorama.html
@@ -71,7 +71,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp10565616"></a><h3>Example launch line</h3>
+<a name="idp5513024"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -95,7 +95,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7714992"></a><h3>Element Information</h3>
+<a name="idp6296928"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6869376"></a><h3>Element Pads</h3>
+<a name="idp6983920"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html b/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html
index f908976..c503418 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiowsincband.html
@@ -83,7 +83,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8942528"></a><h3>Example launch line</h3>
+<a name="idp10887712"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -105,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8261168"></a><h3>Element Information</h3>
+<a name="idp8194096"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -128,7 +128,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6138256"></a><h3>Element Pads</h3>
+<a name="idp6437056"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html b/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html
index 417af7f..b1d13e3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-audiowsinclimit.html
@@ -83,7 +83,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp6850720"></a><h3>Example launch line</h3>
+<a name="idp9529936"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -105,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10982944"></a><h3>Element Information</h3>
+<a name="idp6156448"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -128,7 +128,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6873056"></a><h3>Element Pads</h3>
+<a name="idp6200064"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-auparse.html
index 0ebbc72..d1ccd9d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-auparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-auparse.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6093648"></a><h3>Element Information</h3>
+<a name="idp7607904"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9170592"></a><h3>Element Pads</h3>
+<a name="idp6357424"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html
index 40b476a..c41b3de 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosink.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp5485152"></a><h3>Example launch line</h3>
+<a name="idp10370240"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10627184"></a><h3>Element Information</h3>
+<a name="idp11529200"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9738464"></a><h3>Element Pads</h3>
+<a name="idp10476704"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html
index ce4befc..e0ec303 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autoaudiosrc.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11817920"></a><h3>Example launch line</h3>
+<a name="idp11808896"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp1882064"></a><h3>Element Information</h3>
+<a name="idp5886352"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6081344"></a><h3>Element Pads</h3>
+<a name="idp9690384"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html b/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html
index 0af7ece..4b4262b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autovideosink.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp7435376"></a><h3>Example launch line</h3>
+<a name="idp5681712"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5800176"></a><h3>Element Information</h3>
+<a name="idp6214064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6481776"></a><h3>Element Pads</h3>
+<a name="idp10000336"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html b/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html
index 3fd4a7e..c7f0bda 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-autovideosrc.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8726784"></a><h3>Example launch line</h3>
+<a name="idp10345152"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11712912"></a><h3>Element Information</h3>
+<a name="idp6985808"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11996464"></a><h3>Element Pads</h3>
+<a name="idp11128192"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
index 5ca3189..e92819d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
@@ -64,7 +64,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11770896"></a><h3>Example launch line</h3>
+<a name="idp11919536"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -88,7 +88,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11768592"></a><h3>Element Information</h3>
+<a name="idp11916336"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -111,7 +111,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7449344"></a><h3>Element Pads</h3>
+<a name="idp11910560"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avimux.html b/docs/plugins/html/gst-plugins-good-plugins-avimux.html
index 0fbe5d8..9d5e3ea 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avimux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avimux.html
@@ -76,7 +76,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp6898096"></a><h3>Example launch lines</h3>
+<a name="idp10785168"></a><h3>Example launch lines</h3>
<p>(write everything in one line, without the backslash characters)</p>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
@@ -130,7 +130,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11140432"></a><h3>Element Information</h3>
+<a name="idp12289696"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -153,7 +153,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11273712"></a><h3>Element Pads</h3>
+<a name="idp8587312"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html b/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html
index 079eadb..d12cbc1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avisubtitle.html
@@ -57,7 +57,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8874720"></a><h3>Example launch line</h3>
+<a name="idp7956672"></a><h3>Example launch line</h3>
<p>
Parses the subtitle stream from an avi file.
</p>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6866848"></a><h3>Element Information</h3>
+<a name="idp8915120"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9114720"></a><h3>Element Pads</h3>
+<a name="idp8892544"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-cacasink.html
index fd57b6b..58da6ad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cacasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cacasink.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8935536"></a><h3>Element Information</h3>
+<a name="idp8684768"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11904096"></a><h3>Element Pads</h3>
+<a name="idp12125760"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html
index e8941a5..5a208ee 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairooverlay.html
@@ -54,7 +54,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5975568"></a><h3>Element Information</h3>
+<a name="idp6310128"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -77,7 +77,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6409152"></a><h3>Element Pads</h3>
+<a name="idp6294288"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairorender.html b/docs/plugins/html/gst-plugins-good-plugins-cairorender.html
index 34ce31b..56efc60 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairorender.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairorender.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12788464"></a><h3>Element Information</h3>
+<a name="idp12819152"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -68,7 +68,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5654080"></a><h3>Element Pads</h3>
+<a name="idp10143968"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html
index c504d2d..23ae108 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairotextoverlay.html
@@ -62,7 +62,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9043296"></a><h3>Element Information</h3>
+<a name="idp7298480"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -85,7 +85,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp2670656"></a><h3>Element Pads</h3>
+<a name="idp3251584"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html b/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html
index 602d64f..0541e53 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cairotimeoverlay.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9081552"></a><h3>Element Information</h3>
+<a name="idp10005120"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -68,7 +68,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5598848"></a><h3>Element Pads</h3>
+<a name="idp5840592"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-capssetter.html b/docs/plugins/html/gst-plugins-good-plugins-capssetter.html
index 9e77965..c499d7c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-capssetter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-capssetter.html
@@ -68,7 +68,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11329776"></a><p>
+<a name="idp10973136"></a><p>
Sets or merges caps on a stream's buffers.
That is, a buffer's caps are updated using (fields of)
<a class="link" href="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--caps" title='The "caps" property'>caps</a>. Note that this may
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9102800"></a><h3>Element Information</h3>
+<a name="idp7929248"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -122,7 +122,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13297232"></a><h3>Element Pads</h3>
+<a name="idp7803568"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-cutter.html
index 70407af..87921eb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-cutter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-cutter.html
@@ -89,7 +89,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp6357504"></a><h3>Example launch line</h3>
+<a name="idp10854432"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -107,7 +107,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11153952"></a><h3>Element Information</h3>
+<a name="idp9904912"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -130,7 +130,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5732816"></a><h3>Element Pads</h3>
+<a name="idp6219408"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
index 4b3664f..df3e372 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
@@ -61,7 +61,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8712592"></a><h3>Example launch line</h3>
+<a name="idp3197584"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6418704"></a><h3>Element Information</h3>
+<a name="idp7912928"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11837600"></a><h3>Element Pads</h3>
+<a name="idp13422640"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html
index d9b5a44..71af389 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-deinterlace.html
@@ -71,7 +71,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp9660032"></a><h3>Example launch line</h3>
+<a name="idp8497696"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -89,7 +89,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8786960"></a><h3>Element Information</h3>
+<a name="idp12195232"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -112,7 +112,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7331136"></a><h3>Element Pads</h3>
+<a name="idp11827840"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html b/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html
index af3a25b..ccd466c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-deinterleave.html
@@ -78,7 +78,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp10126080"></a><h3>Example launch line</h3>
+<a name="idp6704656"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -110,7 +110,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6979312"></a><h3>Element Information</h3>
+<a name="idp12252000"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -133,7 +133,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp2710896"></a><h3>Element Pads</h3>
+<a name="idp8629856"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dicetv.html b/docs/plugins/html/gst-plugins-good-plugins-dicetv.html
index 218a878..dc781e9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dicetv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dicetv.html
@@ -83,7 +83,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp5734848"></a><h3>Example launch line</h3>
+<a name="idp8803504"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -101,7 +101,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11133024"></a><h3>Element Information</h3>
+<a name="idp10446672"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -124,7 +124,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6606032"></a><h3>Element Pads</h3>
+<a name="idp13141264"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html b/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html
index 1da577c..956283b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-directsoundsink.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp4543536"></a><h3>Element Information</h3>
+<a name="idp10137824"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -68,7 +68,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10870960"></a><h3>Element Pads</h3>
+<a name="idp6414496"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html b/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html
index 23e5cd0..448c0c1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dv1394src.html
@@ -90,7 +90,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11892656"></a><h3>Element Information</h3>
+<a name="idp6847312"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -113,7 +113,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10643440"></a><h3>Element Pads</h3>
+<a name="idp8058960"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dvdec.html b/docs/plugins/html/gst-plugins-good-plugins-dvdec.html
index eac5a28..baa39c5 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dvdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dvdec.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11066512"></a><h3>Element Information</h3>
+<a name="idp6265136"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11540880"></a><h3>Element Pads</h3>
+<a name="idp6443520"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html b/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html
index 6e30ad2..6902f53 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dvdemux.html
@@ -57,7 +57,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2690912"></a><h3>Element Information</h3>
+<a name="idp11131760"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -80,7 +80,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7547488"></a><h3>Element Pads</h3>
+<a name="idp8973888"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-edgetv.html b/docs/plugins/html/gst-plugins-good-plugins-edgetv.html
index 9d1876f..c2dbc4a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-edgetv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-edgetv.html
@@ -63,7 +63,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp2704416"></a><h3>Example launch line</h3>
+<a name="idp9574256"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -81,7 +81,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7328208"></a><h3>Element Information</h3>
+<a name="idp7723744"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -104,7 +104,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10036848"></a><h3>Element Pads</h3>
+<a name="idp10593904"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html
index 1e1504f..db2708f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-10bands.html
@@ -89,7 +89,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp12681408"></a><h3>Example launch line</h3>
+<a name="idp14333376"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -107,7 +107,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6681536"></a><h3>Element Information</h3>
+<a name="idp5770256"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -130,7 +130,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13272720"></a><h3>Element Pads</h3>
+<a name="idp7063392"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html
index 0ed17d2..26e0112 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-3bands.html
@@ -82,7 +82,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp13457696"></a><h3>Example launch line</h3>
+<a name="idp12467376"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -100,7 +100,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12006848"></a><h3>Element Information</h3>
+<a name="idp14230320"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -123,7 +123,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11650640"></a><h3>Element Pads</h3>
+<a name="idp8724848"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html b/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html
index b6b0190..50fe94d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-equalizer-nbands.html
@@ -81,7 +81,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp12256624"></a><h3>Example launch line</h3>
+<a name="idp8082352"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
</p>
<hr>
<div class="refsect2">
-<a name="idp11701904"></a><h3>Example code</h3>
+<a name="idp10087056"></a><h3>Example code</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -190,7 +190,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7105376"></a><h3>Element Information</h3>
+<a name="idp14304320"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -213,7 +213,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6945472"></a><h3>Element Pads</h3>
+<a name="idp12924512"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacdec.html b/docs/plugins/html/gst-plugins-good-plugins-flacdec.html
index 2b052e9..44a7de1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacdec.html
@@ -58,7 +58,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8757696"></a><h3>Element Information</h3>
+<a name="idp5923824"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -81,7 +81,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11093664"></a><h3>Element Pads</h3>
+<a name="idp13413648"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacenc.html b/docs/plugins/html/gst-plugins-good-plugins-flacenc.html
index 0e3d2cf..500a1af 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacenc.html
@@ -88,7 +88,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5780272"></a><h3>Element Information</h3>
+<a name="idp14131424"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -111,7 +111,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11581408"></a><h3>Element Pads</h3>
+<a name="idp14122528"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
index c1ff6c5..1ac6018 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp5278112"></a><h3>Example pipelines</h3>
+<a name="idp11591312"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -102,7 +102,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9516336"></a><h3>Element Information</h3>
+<a name="idp8033664"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp2264560"></a><h3>Element Pads</h3>
+<a name="idp9826528"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flactag.html b/docs/plugins/html/gst-plugins-good-plugins-flactag.html
index 56f6b5a..ce5c82b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flactag.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flactag.html
@@ -65,7 +65,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7725664"></a><h3>Element Information</h3>
+<a name="idp9078976"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -88,7 +88,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11325344"></a><h3>Element Pads</h3>
+<a name="idp9347696"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html b/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html
index 154ce74..4f66cad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flvdemux.html
@@ -60,7 +60,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8181024"></a><h3>Example launch line</h3>
+<a name="idp9203600"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11678112"></a><h3>Element Information</h3>
+<a name="idp13044864"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5862512"></a><h3>Element Pads</h3>
+<a name="idp9476576"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flvmux.html b/docs/plugins/html/gst-plugins-good-plugins-flvmux.html
index 53dd9ba..3706bdc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flvmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flvmux.html
@@ -77,7 +77,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11936272"></a><h3>Example launch line</h3>
+<a name="idp13147376"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -95,7 +95,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6450800"></a><h3>Element Information</h3>
+<a name="idp11327712"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10194192"></a><h3>Element Pads</h3>
+<a name="idp6870144"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-flxdec.html
index 443949a..2643d99 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flxdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flxdec.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8838624"></a><h3>Element Information</h3>
+<a name="idp8967152"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9990176"></a><h3>Element Pads</h3>
+<a name="idp13584480"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-gamma.html b/docs/plugins/html/gst-plugins-good-plugins-gamma.html
index 7661c7c..ba9f6fe 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-gamma.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-gamma.html
@@ -70,7 +70,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp7831248"></a><h3>Example launch line</h3>
+<a name="idp11779792"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -102,7 +102,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8374064"></a><h3>Element Information</h3>
+<a name="idp12452368"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11971904"></a><h3>Element Pads</h3>
+<a name="idp8933504"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html b/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html
index e0c91c7..cedb3f3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-gdkpixbufsink.html
@@ -45,7 +45,7 @@
<div class="refsect1">
<a name="gst-plugins-good-plugins-gdkpixbufsink.properties"></a><h2>Properties</h2>
<pre class="synopsis">
- "<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--last-pixbuf" title='The "last-pixbuf" property'>last-pixbuf</a>" <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-The-GdkPixbuf-Structure.html#GdkPixbuf"><span class="type">GdkPixbuf</span></a>* : Read
+ "<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--last-pixbuf" title='The "last-pixbuf" property'>last-pixbuf</a>" <span class="type">GdkPixbuf</span>* : Read
"<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--send-messages" title='The "send-messages" property'>send-messages</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
"<a class="link" href="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--post-messages" title='The "post-messages" property'>post-messages</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write
</pre>
@@ -55,7 +55,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10826272"></a><h3>Element Information</h3>
+<a name="idp6571584"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -78,7 +78,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11380528"></a><h3>Element Pads</h3>
+<a name="idp11818064"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -125,7 +125,7 @@
<a name="gst-plugins-good-plugins-gdkpixbufsink.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
<a name="GstGdkPixbufSink--last-pixbuf"></a><h3>The <code class="literal">"last-pixbuf"</code> property</h3>
-<pre class="programlisting"> "last-pixbuf" <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-The-GdkPixbuf-Structure.html#GdkPixbuf"><span class="type">GdkPixbuf</span></a>* : Read</pre>
+<pre class="programlisting"> "last-pixbuf" <span class="type">GdkPixbuf</span>* : Read</pre>
<p>Last GdkPixbuf object rendered.</p>
</div>
<hr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-goom.html b/docs/plugins/html/gst-plugins-good-plugins-goom.html
index c7285ec..eb155f7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-goom.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-goom.html
@@ -61,7 +61,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp13676048"></a><h3>Example launch line</h3>
+<a name="idp12894848"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5812672"></a><h3>Element Information</h3>
+<a name="idp7569040"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10060656"></a><h3>Element Pads</h3>
+<a name="idp6657312"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html
index 1762d84..ca66e56 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-goom2k1.html
@@ -62,7 +62,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8087296"></a><h3>Example launch line</h3>
+<a name="idp8895024"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2828400"></a><h3>Element Information</h3>
+<a name="idp11762288"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11687600"></a><h3>Element Pads</h3>
+<a name="idp11626624"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html
index 878d38c..7487971 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-halaudiosink.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14160688"></a><h3>Element Information</h3>
+<a name="idp9813296"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14692672"></a><h3>Element Pads</h3>
+<a name="idp12480080"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html
index 13d599c..03f1431 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-halaudiosrc.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6929200"></a><h3>Element Information</h3>
+<a name="idp5920880"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13351728"></a><h3>Element Pads</h3>
+<a name="idp10115680"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html b/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html
index cea8cb6..e45760c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-hdv1394src.html
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14566048"></a><h3>Element Information</h3>
+<a name="idp14486608"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11549312"></a><h3>Element Pads</h3>
+<a name="idp13003296"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-icydemux.html
index d6103ce..d73cfae 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-icydemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-icydemux.html
@@ -64,7 +64,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp8752736"></a><h3>Example launch line</h3>
+<a name="idp11712848"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -85,7 +85,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6852624"></a><h3>Element Information</h3>
+<a name="idp13509056"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -108,7 +108,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7234704"></a><h3>Element Pads</h3>
+<a name="idp5485952"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-id3demux.html
index d116742..c7f7721 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-id3demux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-id3demux.html
@@ -83,7 +83,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp1554832"></a><h3>Example launch line</h3>
+<a name="idp12933904"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -103,7 +103,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8865840"></a><h3>Element Information</h3>
+<a name="idp9773552"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -126,7 +126,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12020096"></a><h3>Element Pads</h3>
+<a name="idp9938576"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html b/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html
index 2478229..9f2b7bb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-id3v2mux.html
@@ -66,7 +66,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6447088"></a><h3>Element Information</h3>
+<a name="idp12796832"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -89,7 +89,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13280416"></a><h3>Element Pads</h3>
+<a name="idp13305392"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html
index 971e0ec..1b3f546 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-imagefreeze.html
@@ -62,7 +62,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11896576"></a><h3>Example launch line</h3>
+<a name="idp14310704"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10630384"></a><h3>Element Information</h3>
+<a name="idp10794624"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8437888"></a><h3>Element Pads</h3>
+<a name="idp13457184"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-interleave.html
index 78da256..afedfa4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-interleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-interleave.html
@@ -82,7 +82,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp14622416"></a><h3>Example launch line</h3>
+<a name="idp11052288"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -113,7 +113,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14085984"></a><h3>Element Information</h3>
+<a name="idp10927472"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -136,7 +136,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6309776"></a><h3>Element Pads</h3>
+<a name="idp11749296"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html b/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html
index ecba103..b5500f7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ismlmux.html
@@ -56,7 +56,7 @@
ISO 14496-12 (except for some media specific parts).
In turn, the latter ISO Base Media format was further specialized as a
Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
The fragmented file features defined (only) in ISO Base Media are used by
ISMV files making up (a.o.) Smooth Streaming (ismlmux).
</p>
@@ -96,7 +96,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp12445088"></a><h3>Example pipelines</h3>
+<a name="idp11996000"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -119,7 +119,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8296592"></a><h3>Element Information</h3>
+<a name="idp13520976"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -142,7 +142,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5735360"></a><h3>Element Pads</h3>
+<a name="idp2111536"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html
index 9850bde..fb11db8 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosink.html
@@ -52,7 +52,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+ +----GstAudioBaseSink
+----GstJackAudioSink
</pre>
</div>
@@ -71,7 +71,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14199808"></a><h3>Element Information</h3>
+<a name="idp11351712"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -94,7 +94,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12583040"></a><h3>Element Pads</h3>
+<a name="idp3040816"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html
index 76b871b..ca640fb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jackaudiosrc.html
@@ -53,7 +53,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+ +----GstAudioBaseSrc
+----GstJackAudioSrc
</pre>
</div>
@@ -72,7 +72,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14932784"></a><h3>Element Information</h3>
+<a name="idp11547568"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -95,7 +95,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7660400"></a><h3>Element Pads</h3>
+<a name="idp6028736"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html b/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html
index eec11c3..fb2906c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jpegdec.html
@@ -51,7 +51,7 @@
+----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder">GstVideoDecoder</a>
+ +----GstVideoDecoder
+----GstJpegDec
</pre>
</div>
@@ -67,7 +67,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11913216"></a><h3>Element Information</h3>
+<a name="idp13020896"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -90,7 +90,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5547968"></a><h3>Element Pads</h3>
+<a name="idp10621456"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html b/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html
index b5f8725..ebb5633 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-jpegenc.html
@@ -55,7 +55,7 @@
+----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder">GstVideoEncoder</a>
+ +----GstVideoEncoder
+----GstJpegEnc
</pre>
</div>
@@ -83,7 +83,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5863408"></a><h3>Element Information</h3>
+<a name="idp13585120"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -106,7 +106,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13358688"></a><h3>Element Pads</h3>
+<a name="idp7128304"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-level.html b/docs/plugins/html/gst-plugins-good-plugins-level.html
index 6f106dd..32284ff 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-level.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-level.html
@@ -127,7 +127,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp10054000"></a><h3>Example application</h3>
+<a name="idp14067184"></a><h3>Example application</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -401,7 +401,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12188624"></a><h3>Element Information</h3>
+<a name="idp15231584"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -424,7 +424,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15134432"></a><h3>Element Pads</h3>
+<a name="idp10897040"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html b/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html
index 622555b..feca2a9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-matroskademux.html
@@ -68,7 +68,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp12150016"></a><h3>Example launch line</h3>
+<a name="idp7858688"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -86,7 +86,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10071664"></a><h3>Element Information</h3>
+<a name="idp11469104"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -109,7 +109,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15544336"></a><h3>Element Pads</h3>
+<a name="idp13845984"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html b/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html
index 4fd442b..bbf1630 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-matroskamux.html
@@ -61,7 +61,7 @@
<a name="gst-plugins-good-plugins-matroskamux.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
<p>
GstMatroskaMux implements
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTocSetter.html#GstTocSetter">GstTocSetter</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and GstTocSetter.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-good-plugins-matroskamux.properties"></a><h2>Properties</h2>
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp14139872"></a><h3>Example launch line</h3>
+<a name="idp15352928"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -109,7 +109,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7143184"></a><h3>Element Information</h3>
+<a name="idp13528912"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -132,7 +132,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14871456"></a><h3>Element Pads</h3>
+<a name="idp15038080"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html
index dfba81c..887b726 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html
@@ -93,7 +93,7 @@
ISO 14496-12 (except for some media specific parts).
In turn, the latter ISO Base Media format was further specialized as a
Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
The fragmented file features defined (only) in ISO Base Media are used by
ISMV files making up (a.o.) Smooth Streaming (ismlmux).
</p>
@@ -133,7 +133,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp14947264"></a><h3>Example pipelines</h3>
+<a name="idp16379776"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -156,7 +156,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14950608"></a><h3>Element Information</h3>
+<a name="idp16383120"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -179,7 +179,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13684256"></a><h3>Element Pads</h3>
+<a name="idp13655488"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html
index b5785e7..86de295 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html
@@ -49,7 +49,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp15098752"></a><h3>Example launch line</h3>
+<a name="idp14634032"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -67,7 +67,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10557040"></a><h3>Element Information</h3>
+<a name="idp13144176"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -90,7 +90,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14622192"></a><h3>Element Pads</h3>
+<a name="idp16556256"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html
index 8028e8f..e95506f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html
@@ -93,7 +93,7 @@
ISO 14496-12 (except for some media specific parts).
In turn, the latter ISO Base Media format was further specialized as a
Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
-and in various 3GPP(2) specs (gppmux).
+and in various 3GPP(2) specs (3gppmux).
The fragmented file features defined (only) in ISO Base Media are used by
ISMV files making up (a.o.) Smooth Streaming (ismlmux).
</p>
@@ -133,7 +133,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp13718864"></a><h3>Example pipelines</h3>
+<a name="idp11215424"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -156,7 +156,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16971472"></a><h3>Element Information</h3>
+<a name="idp16346192"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -179,7 +179,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14772880"></a><h3>Element Pads</h3>
+<a name="idp14421760"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
index cae13ae..539e439 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
@@ -61,7 +61,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp15916176"></a><h3>Example launch line</h3>
+<a name="idp10058000"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12368368"></a><h3>Element Information</h3>
+<a name="idp10365648"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5454560"></a><h3>Element Pads</h3>
+<a name="idp12821264"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html b/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html
index 72fbb45..1f996aa 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mulawdec.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7932992"></a><h3>Element Information</h3>
+<a name="idp6390896"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13612640"></a><h3>Element Pads</h3>
+<a name="idp6743376"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html b/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html
index 68a6c6f..7127610 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mulawenc.html
@@ -49,7 +49,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15582992"></a><h3>Element Information</h3>
+<a name="idp12671616"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -72,7 +72,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15600032"></a><h3>Element Pads</h3>
+<a name="idp11638912"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html b/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html
index 665a1b5..d69d325 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multifilesink.html
@@ -132,7 +132,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11279248"></a><h3>Example launch line</h3>
+<a name="idp16984192"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -155,7 +155,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12899488"></a><h3>Element Information</h3>
+<a name="idp15017088"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -178,7 +178,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13672064"></a><h3>Element Pads</h3>
+<a name="idp8195056"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html b/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html
index 2ae5603..84e2d77 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multifilesrc.html
@@ -81,7 +81,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp13648928"></a><h3>Example launch line</h3>
+<a name="idp16445136"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -104,7 +104,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14462128"></a><h3>Element Information</h3>
+<a name="idp6057696"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -127,7 +127,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13053824"></a><h3>Element Pads</h3>
+<a name="idp15996928"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html b/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html
index 29cf6ef..a83c2a9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multipartdemux.html
@@ -83,7 +83,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp13627088"></a><h3>Sample pipelines</h3>
+<a name="idp14969952"></a><h3>Sample pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -102,7 +102,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15846352"></a><h3>Element Information</h3>
+<a name="idp7024064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12900448"></a><h3>Element Pads</h3>
+<a name="idp16683584"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html b/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html
index d1339e4..50b4679 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multipartmux.html
@@ -70,7 +70,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp7198176"></a><h3>Sample pipelines</h3>
+<a name="idp15901952"></a><h3>Sample pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -89,7 +89,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12671808"></a><h3>Element Information</h3>
+<a name="idp3128720"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -112,7 +112,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14974560"></a><h3>Element Pads</h3>
+<a name="idp14213872"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
index 554c94c..200c310 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
@@ -100,7 +100,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13416368"></a><h3>Element Information</h3>
+<a name="idp15182992"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -123,7 +123,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14614272"></a><h3>Element Pads</h3>
+<a name="idp14663680"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-optv.html b/docs/plugins/html/gst-plugins-good-plugins-optv.html
index f87bdc9..c7ebc25 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-optv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-optv.html
@@ -74,7 +74,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp15603072"></a><h3>Example launch line</h3>
+<a name="idp9675584"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11528464"></a><h3>Element Information</h3>
+<a name="idp13501936"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -115,7 +115,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15019408"></a><h3>Element Pads</h3>
+<a name="idp7227808"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html b/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html
index 139ad25..40ce727 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-oss4sink.html
@@ -54,7 +54,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+ +----GstAudioBaseSink
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
+----GstOss4Sink
</pre>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16061408"></a><h3>Element Information</h3>
+<a name="idp14166736"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13535600"></a><h3>Element Pads</h3>
+<a name="idp13591312"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-oss4src.html b/docs/plugins/html/gst-plugins-good-plugins-oss4src.html
index b38cdfe..10b5c7e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-oss4src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-oss4src.html
@@ -55,7 +55,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+ +----GstAudioBaseSrc
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
+----GstOss4Source
</pre>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13893984"></a><h3>Element Information</h3>
+<a name="idp16960352"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13665600"></a><h3>Element Pads</h3>
+<a name="idp15252448"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osssink.html b/docs/plugins/html/gst-plugins-good-plugins-osssink.html
index 3348d2f..687df59 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osssink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osssink.html
@@ -52,7 +52,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+ +----GstAudioBaseSink
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
+----GstOssSink
</pre>
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17396592"></a><h3>Element Information</h3>
+<a name="idp13042544"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12343984"></a><h3>Element Pads</h3>
+<a name="idp15048208"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osssrc.html b/docs/plugins/html/gst-plugins-good-plugins-osssrc.html
index 5aaf721..a823ca7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osssrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osssrc.html
@@ -55,7 +55,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+ +----GstAudioBaseSrc
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
+----GstOssSrc
</pre>
@@ -78,7 +78,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14875536"></a><h3>Element Information</h3>
+<a name="idp14918800"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12837568"></a><h3>Element Pads</h3>
+<a name="idp16633296"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html
index 02a4f51..d9990d4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosink.html
@@ -53,7 +53,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15465232"></a><h3>Element Information</h3>
+<a name="idp14466992"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -76,7 +76,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11952400"></a><h3>Element Pads</h3>
+<a name="idp14449936"></a><h3>Element Pads</h3>
</div>
</div>
<p>
@@ -90,8 +90,10 @@
GstBaseAudioSink sink;
AudioDeviceID device_id;
+
AudioUnit audiounit;
double volume;
+ GstCaps *cached_caps;
};
</pre>
<p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html
index f7e300a..a88cee6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osxaudiosrc.html
@@ -53,7 +53,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14176992"></a><h3>Element Information</h3>
+<a name="idp13749760"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -76,7 +76,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13268544"></a><h3>Element Pads</h3>
+<a name="idp12698672"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html b/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html
index 24c9bd9..8fd6f71 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-osxvideosink.html
@@ -54,7 +54,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16997200"></a><h3>Element Information</h3>
+<a name="idp14476656"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -77,7 +77,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14990512"></a><h3>Element Pads</h3>
+<a name="idp11391024"></a><h3>Element Pads</h3>
</div>
</div>
<p>
@@ -100,6 +100,10 @@
#else
guint cocoa_timeout;
#endif
+ GMutex *mrl_check_lock;
+ GCond *mrl_check_cond;
+ gboolean mrl_check_done;
+ gboolean main_run_loop_running;
gboolean app_started;
gboolean keep_par;
gboolean embed;
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
index a938dca..d3973ec 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22781584"></a><h2>Plugin Information</h2>
+<a name="idp24582576"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp20322912"></a><h2>Elements</h2>
+<a name="idp23109216"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
index 9d6ce8c..bbccf6e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24986464"></a><h2>Plugin Information</h2>
+<a name="idp24753904"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp21925168"></a><h2>Elements</h2>
+<a name="idp23558624"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
index 8be4730..9d572ce 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17811504"></a><h2>Plugin Information</h2>
+<a name="idp24871056"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24819504"></a><h2>Elements</h2>
+<a name="idp23217984"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
index 99894eb..f5a085e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp14805360"></a><h2>Plugin Information</h2>
+<a name="idp24081152"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp13735680"></a><h2>Elements</h2>
+<a name="idp21948656"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
index df5eedd..0ea01f1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23892144"></a><h2>Plugin Information</h2>
+<a name="idp20194608"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp21454288"></a><h2>Elements</h2>
+<a name="idp24939344"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
index 49d4c4a..e4669d9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25063344"></a><h2>Plugin Information</h2>
+<a name="idp23271728"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp21453504"></a><h2>Elements</h2>
+<a name="idp24795392"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
index c2fadf4..d2eadd2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22788656"></a><h2>Plugin Information</h2>
+<a name="idp23056256"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22740064"></a><h2>Elements</h2>
+<a name="idp20230160"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
index 655492c..20f5cca 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16218880"></a><h2>Plugin Information</h2>
+<a name="idp19823648"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22094448"></a><h2>Elements</h2>
+<a name="idp24833632"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
index 8ec29d2..3441914 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23780592"></a><h2>Plugin Information</h2>
+<a name="idp22728128"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24000144"></a><h2>Elements</h2>
+<a name="idp24636288"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
index f503123..c795ac1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp21423312"></a><h2>Plugin Information</h2>
+<a name="idp23129088"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23572032"></a><h2>Elements</h2>
+<a name="idp25835568"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
index 54f3dc2..0a29b11 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25238256"></a><h2>Plugin Information</h2>
+<a name="idp24489488"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23849024"></a><h2>Elements</h2>
+<a name="idp24156704"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
index 0214029..8d3b2a0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp21926816"></a><h2>Plugin Information</h2>
+<a name="idp24676880"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25247312"></a><h2>Elements</h2>
+<a name="idp22516016"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
index f157d71..dc80f07 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24721696"></a><h2>Plugin Information</h2>
+<a name="idp25852224"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24658896"></a><h2>Elements</h2>
+<a name="idp24545392"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
index 83dcbb1..cbb6967 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp21543296"></a><h2>Plugin Information</h2>
+<a name="idp24944432"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23194208"></a><h2>Elements</h2>
+<a name="idp17188624"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
index 374026c..638f7bf 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp12233792"></a><h2>Plugin Information</h2>
+<a name="idp19826752"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp20855856"></a><h2>Elements</h2>
+<a name="idp9993856"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html
index a333062..0f62fd1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-directsound.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24875616"></a><h2>Plugin Information</h2>
+<a name="idp25053552"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19639328"></a><h2>Elements</h2>
+<a name="idp23678864"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
index 59b5dd6..231d673 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20431056"></a><h2>Plugin Information</h2>
+<a name="idp21749552"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22006400"></a><h2>Elements</h2>
+<a name="idp22737504"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
index 678b583..ed5954b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25029616"></a><h2>Plugin Information</h2>
+<a name="idp23057184"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22703360"></a><h2>Elements</h2>
+<a name="idp24027776"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
index 89f1661..db3af5e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24669920"></a><h2>Plugin Information</h2>
+<a name="idp20258560"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22018208"></a><h2>Elements</h2>
+<a name="idp22354128"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
index a8010ef..3bd751e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20426768"></a><h2>Plugin Information</h2>
+<a name="idp23222224"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24582224"></a><h2>Elements</h2>
+<a name="idp24937120"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
index aa7650b..c5f42d9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24922080"></a><h2>Plugin Information</h2>
+<a name="idp23492560"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22424640"></a><h2>Elements</h2>
+<a name="idp24192112"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
index 208fa1c..a055bb1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25306016"></a><h2>Plugin Information</h2>
+<a name="idp25789920"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24566240"></a><h2>Elements</h2>
+<a name="idp25507488"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
index d668273..4518712 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22618848"></a><h2>Plugin Information</h2>
+<a name="idp24688256"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25040768"></a><h2>Elements</h2>
+<a name="idp20247616"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
index ef9bf13..663fbd2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22609920"></a><h2>Plugin Information</h2>
+<a name="idp19545920"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp11144400"></a><h2>Elements</h2>
+<a name="idp18907360"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
index 6045c50..452cb1b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25302064"></a><h2>Plugin Information</h2>
+<a name="idp24238576"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24659600"></a><h2>Elements</h2>
+<a name="idp20017296"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html
index 395e408..a7cf253 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-halelements.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25361824"></a><h2>Plugin Information</h2>
+<a name="idp23718832"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24316272"></a><h2>Elements</h2>
+<a name="idp23165600"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
index f7e21ca..5de79f1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp8043056"></a><h2>Plugin Information</h2>
+<a name="idp25075600"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp5675520"></a><h2>Elements</h2>
+<a name="idp24404432"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
index 3e16557..07138fa 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp3606736"></a><h2>Plugin Information</h2>
+<a name="idp18107424"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19925808"></a><h2>Elements</h2>
+<a name="idp20238928"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
index c9860ca..486f6a5 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24775136"></a><h2>Plugin Information</h2>
+<a name="idp21831072"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24032640"></a><h2>Elements</h2>
+<a name="idp23282480"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
index fbfd053..296eb9d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25453072"></a><h2>Plugin Information</h2>
+<a name="idp13857072"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22660608"></a><h2>Elements</h2>
+<a name="idp6976720"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
index 7e40a9e..a5f55da 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20474992"></a><h2>Plugin Information</h2>
+<a name="idp25796832"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25481232"></a><h2>Elements</h2>
+<a name="idp22219088"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
index e1601a8..d9abf24 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24886016"></a><h2>Plugin Information</h2>
+<a name="idp24477872"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24537232"></a><h2>Elements</h2>
+<a name="idp20368400"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
index 4a5d85d..dba012f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23833504"></a><h2>Plugin Information</h2>
+<a name="idp25960864"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25594608"></a><h2>Elements</h2>
+<a name="idp23475456"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
index 62dfa3c..f91f670 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24051248"></a><h2>Plugin Information</h2>
+<a name="idp24720768"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25245536"></a><h2>Elements</h2>
+<a name="idp19589456"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
index 6dab448..d662233 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25225968"></a><h2>Plugin Information</h2>
+<a name="idp24018000"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23829280"></a><h2>Elements</h2>
+<a name="idp20323760"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html
index 387ddba..0e902be 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-monoscope.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24069584"></a><h2>Plugin Information</h2>
+<a name="idp24875024"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24600528"></a><h2>Elements</h2>
+<a name="idp24383264"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
index 83470bc..eb6600d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24551376"></a><h2>Plugin Information</h2>
+<a name="idp23148640"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25979856"></a><h2>Elements</h2>
+<a name="idp22738896"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
index c9c568e..9514894 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22067616"></a><h2>Plugin Information</h2>
+<a name="idp26044176"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24966240"></a><h2>Elements</h2>
+<a name="idp24833760"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
index 1f458e4..5f03771 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25485184"></a><h2>Plugin Information</h2>
+<a name="idp24250224"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23208016"></a><h2>Elements</h2>
+<a name="idp22157808"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
index 61a1c86..e330774 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25243376"></a><h2>Plugin Information</h2>
+<a name="idp26135728"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25561648"></a><h2>Elements</h2>
+<a name="idp23687200"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
index 53da264..a958542 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25292144"></a><h2>Plugin Information</h2>
+<a name="idp26232048"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25457904"></a><h2>Elements</h2>
+<a name="idp24425328"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
index bc96510..5b9d599 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24255776"></a><h2>Plugin Information</h2>
+<a name="idp24994128"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24308256"></a><h2>Elements</h2>
+<a name="idp24834448"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html
index a9416f9..609ab74 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxaudio.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24041120"></a><h2>Plugin Information</h2>
+<a name="idp26153264"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24336544"></a><h2>Elements</h2>
+<a name="idp23751648"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html
index bcabc1a..3ac44ad 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-osxvideo.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24241888"></a><h2>Plugin Information</h2>
+<a name="idp25132816"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25384000"></a><h2>Elements</h2>
+<a name="idp24858496"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
index 5442fd4..801f472 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24267792"></a><h2>Plugin Information</h2>
+<a name="idp25755072"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19747168"></a><h2>Elements</h2>
+<a name="idp24024624"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
index 8d32f63..7bb7872 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25585120"></a><h2>Plugin Information</h2>
+<a name="idp25065872"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22058112"></a><h2>Elements</h2>
+<a name="idp23574400"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
index 528cff9..39cbe8b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25171600"></a><h2>Plugin Information</h2>
+<a name="idp8479904"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23837600"></a><h2>Elements</h2>
+<a name="idp24446656"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
index b0d5577..b9dcd39 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24338912"></a><h2>Plugin Information</h2>
+<a name="idp26092768"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25162896"></a><h2>Elements</h2>
+<a name="idp22789504"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
index 662b5f1..d3566db 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25617888"></a><h2>Plugin Information</h2>
+<a name="idp25528912"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25413856"></a><h2>Elements</h2>
+<a name="idp23222880"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
index 5cd62c9..5c2f81a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24608160"></a><h2>Plugin Information</h2>
+<a name="idp25480896"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23625248"></a><h2>Elements</h2>
+<a name="idp24821152"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
index 3ff9d4d..668ce0b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25996640"></a><h2>Plugin Information</h2>
+<a name="idp18746224"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24972048"></a><h2>Elements</h2>
+<a name="idp26267552"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
index b27334b..ed22b42 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24125632"></a><h2>Plugin Information</h2>
+<a name="idp22476176"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22082912"></a><h2>Elements</h2>
+<a name="idp22668288"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
index a5e2047..64c9c3a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16493008"></a><h2>Plugin Information</h2>
+<a name="idp24616480"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25036272"></a><h2>Elements</h2>
+<a name="idp26285616"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
index 14d8fb6..37a6956 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24671136"></a><h2>Plugin Information</h2>
+<a name="idp23339984"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24309696"></a><h2>Elements</h2>
+<a name="idp22813664"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
index ad5d741..075ee0b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25131056"></a><h2>Plugin Information</h2>
+<a name="idp24474016"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24898128"></a><h2>Elements</h2>
+<a name="idp24481296"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
index 2bd5263..b77bd08 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24341712"></a><h2>Plugin Information</h2>
+<a name="idp25056064"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23098432"></a><h2>Elements</h2>
+<a name="idp24620384"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
index 9130e32..390320b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23613664"></a><h2>Plugin Information</h2>
+<a name="idp22092832"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24065536"></a><h2>Elements</h2>
+<a name="idp24941456"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
index 9c75722..83f24a4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25965760"></a><h2>Plugin Information</h2>
+<a name="idp25938960"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25343008"></a><h2>Elements</h2>
+<a name="idp24773232"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
index 90f85ba..596fa20 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24529152"></a><h2>Plugin Information</h2>
+<a name="idp25954832"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25577952"></a><h2>Elements</h2>
+<a name="idp24020048"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
index c04124e..c769d9a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp26006752"></a><h2>Plugin Information</h2>
+<a name="idp25725024"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp23207488"></a><h2>Elements</h2>
+<a name="idp21649328"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
index 18d01a0..d235073 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23207616"></a><h2>Plugin Information</h2>
+<a name="idp24408480"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24495712"></a><h2>Elements</h2>
+<a name="idp26248784"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
index f2fa1d2..e24f774 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24878176"></a><h2>Plugin Information</h2>
+<a name="idp25505632"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp26380544"></a><h2>Elements</h2>
+<a name="idp24178112"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
index a4c5a77..e5c1f74 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp19015376"></a><h2>Plugin Information</h2>
+<a name="idp25549360"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24088336"></a><h2>Elements</h2>
+<a name="idp25473808"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html
index 68b98f4..9db09d1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-waveform.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25201280"></a><h2>Plugin Information</h2>
+<a name="idp26101440"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24790320"></a><h2>Elements</h2>
+<a name="idp26253760"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
index e0c933d..1638923 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25256224"></a><h2>Plugin Information</h2>
+<a name="idp20971056"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp22658224"></a><h2>Elements</h2>
+<a name="idp24759920"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
index f7f1bdb..ca3af2c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24577856"></a><h2>Plugin Information</h2>
+<a name="idp26757552"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25990224"></a><h2>Elements</h2>
+<a name="idp17943568"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
index 74ca12d..ac2517a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp25155728"></a><h2>Plugin Information</h2>
+<a name="idp22552592"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25534896"></a><h2>Elements</h2>
+<a name="idp22763968"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
index f630714..c5cee45 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24077392"></a><h2>Plugin Information</h2>
+<a name="idp25720384"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp24753360"></a><h2>Elements</h2>
+<a name="idp10229296"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
index 1a04d50..d779715 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp26435280"></a><h2>Plugin Information</h2>
+<a name="idp26690160"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp25437584"></a><h2>Elements</h2>
+<a name="idp26737904"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pngdec.html b/docs/plugins/html/gst-plugins-good-plugins-pngdec.html
index 51d8853..9ec9c96 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pngdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pngdec.html
@@ -49,7 +49,7 @@
+----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder">GstVideoDecoder</a>
+ +----GstVideoDecoder
+----GstPngDec
</pre>
</div>
@@ -58,7 +58,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17045680"></a><h3>Element Information</h3>
+<a name="idp13348768"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -81,7 +81,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12461632"></a><h3>Element Pads</h3>
+<a name="idp17448528"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pngenc.html b/docs/plugins/html/gst-plugins-good-plugins-pngenc.html
index 4535725..ec1cd69 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pngenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pngenc.html
@@ -53,7 +53,7 @@
+----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder">GstVideoEncoder</a>
+ +----GstVideoEncoder
+----GstPngEnc
</pre>
</div>
@@ -75,7 +75,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8801328"></a><h3>Element Information</h3>
+<a name="idp16802192"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -98,7 +98,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17387600"></a><h3>Element Pads</h3>
+<a name="idp17219808"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-progressreport.html b/docs/plugins/html/gst-plugins-good-plugins-progressreport.html
index 2144ac4..ce530c9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-progressreport.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-progressreport.html
@@ -104,7 +104,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp16573728"></a><h3>Example launch line</h3>
+<a name="idp16876784"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -133,7 +133,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14888352"></a><h3>Element Information</h3>
+<a name="idp17475792"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -156,7 +156,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17620800"></a><h3>Element Pads</h3>
+<a name="idp18411504"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html b/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html
index 88cc29d..dc27335 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pulsesink.html
@@ -54,7 +54,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink">GstAudioBaseSink</a>
+ +----GstAudioBaseSink
+----GstPulseSink
</pre>
</div>
@@ -82,7 +82,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14226496"></a><h3>Element Information</h3>
+<a name="idp18505952"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -105,7 +105,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18533488"></a><h3>Element Pads</h3>
+<a name="idp18169792"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html b/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html
index 14a4066..cddfd33 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-pulsesrc.html
@@ -55,7 +55,7 @@
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc">GstAudioBaseSrc</a>
+ +----GstAudioBaseSrc
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
+----GstPulseSrc
</pre>
@@ -85,7 +85,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15830176"></a><h3>Element Information</h3>
+<a name="idp18467712"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -108,7 +108,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16137760"></a><h3>Element Pads</h3>
+<a name="idp16571856"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html b/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html
index e077485..a839aec 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-qtdemux.html
@@ -72,7 +72,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp18579184"></a><h3>Example launch line</h3>
+<a name="idp16508992"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -96,7 +96,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18396848"></a><h3>Element Information</h3>
+<a name="idp11555520"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -119,7 +119,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14995312"></a><h3>Element Pads</h3>
+<a name="idp18441568"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html b/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html
index afe1b1d..8a4f92c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-qtmoovrecover.html
@@ -81,7 +81,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp16289536"></a><h3>Example pipelines</h3>
+<a name="idp19021920"></a><h3>Example pipelines</h3>
<p>
This element recovers quicktime files created with qtmux using the moov
recovery feature.
@@ -102,7 +102,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17935520"></a><h3>Element Information</h3>
+<a name="idp14994016"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -125,7 +125,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13683776"></a><h3>Element Pads</h3>
+<a name="idp18410608"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html
index cf48bb4..cd7324a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html
@@ -133,7 +133,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp14533840"></a><h3>Example pipelines</h3>
+<a name="idp15040608"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -155,7 +155,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18089440"></a><h3>Element Information</h3>
+<a name="idp17984064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -178,7 +178,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18220912"></a><h3>Element Pads</h3>
+<a name="idp16286576"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-quarktv.html b/docs/plugins/html/gst-plugins-good-plugins-quarktv.html
index 41ef034..dce1981 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-quarktv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-quarktv.html
@@ -65,32 +65,31 @@
<div class="refsect1">
<a name="gst-plugins-good-plugins-quarktv.description"></a><h2>Description</h2>
<p>
-RevTV acts like a video waveform monitor for each line of video
-processed. This creates a pseudo 3D effect based on the brightness
-of the video along each line.
+QuarkTV disolves moving objects. It picks up pixels from
+the last frames randomly.
</p>
<p>
</p>
<div class="refsect2">
-<a name="idp16982704"></a><h3>Example launch line</h3>
+<a name="idp16931968"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="listing_lines" align="right"><pre>1</pre></td>
- <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> revtv <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> quarktv <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
</tr>
</tbody>
</table>
</div>
- This pipeline shows the effect of revtv on a test stream.
+ This pipeline shows the effect of quarktv on a test stream.
</div>
<p>
</p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12094928"></a><h3>Element Information</h3>
+<a name="idp16592720"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -113,7 +112,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7666208"></a><h3>Element Pads</h3>
+<a name="idp18151408"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-radioactv.html b/docs/plugins/html/gst-plugins-good-plugins-radioactv.html
index f6406ca..ee691f3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-radioactv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-radioactv.html
@@ -83,7 +83,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp17938752"></a><h3>Example launch line</h3>
+<a name="idp15095104"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -101,7 +101,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17974720"></a><h3>Element Information</h3>
+<a name="idp18423808"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -124,7 +124,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18371584"></a><h3>Element Pads</h3>
+<a name="idp18965008"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-revtv.html b/docs/plugins/html/gst-plugins-good-plugins-revtv.html
index 06a01ab..77f9615 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-revtv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-revtv.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15114448"></a><h3>Element Information</h3>
+<a name="idp18985248"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18604560"></a><h3>Element Pads</h3>
+<a name="idp18508432"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html b/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html
index 925288a..e3c227f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rganalysis.html
@@ -90,7 +90,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp18377488"></a><h3>Example launch lines</h3>
+<a name="idp17336704"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -138,7 +138,7 @@
</p>
<hr>
<div class="refsect2">
-<a name="idp16057808"></a><h3>Acknowledgements</h3>
+<a name="idp17701760"></a><h3>Acknowledgements</h3>
<p>
This element is based on code used in the <a class="ulink" href="http://sjeng.org/vorbisgain.html" target="_top">vorbisgain</a> program and many
others. The relevant parts are copyrighted by David Robinson, Glen Sawyer
@@ -150,7 +150,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16076176"></a><h3>Element Information</h3>
+<a name="idp16660448"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -173,7 +173,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16534736"></a><h3>Element Pads</h3>
+<a name="idp15233984"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html b/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html
index 99dbbcf..42173b2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rglimiter.html
@@ -71,7 +71,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp17417984"></a><h3>Example launch line</h3>
+<a name="idp16576208"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -93,7 +93,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16095728"></a><h3>Element Information</h3>
+<a name="idp13916960"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -116,7 +116,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12715696"></a><h3>Element Pads</h3>
+<a name="idp18335424"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html b/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html
index 139a0fe..c5eec8e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rgvolume.html
@@ -104,7 +104,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11662896"></a><h3>Example launch line</h3>
+<a name="idp19014832"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -124,7 +124,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15798384"></a><h3>Element Information</h3>
+<a name="idp18625824"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -147,7 +147,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17320768"></a><h3>Element Pads</h3>
+<a name="idp19948352"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rippletv.html b/docs/plugins/html/gst-plugins-good-plugins-rippletv.html
index 8e48a1e..c759a7f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rippletv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rippletv.html
@@ -72,7 +72,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp14494592"></a><h3>Example launch line</h3>
+<a name="idp18655552"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -90,7 +90,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18386560"></a><h3>Element Information</h3>
+<a name="idp12788160"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -113,7 +113,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12922656"></a><h3>Element Pads</h3>
+<a name="idp17201552"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
index e1cfb98..2642d15 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
@@ -105,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19963648"></a><h3>Element Information</h3>
+<a name="idp20413840"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -128,7 +128,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19971104"></a><h3>Element Pads</h3>
+<a name="idp20707808"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html b/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html
index 60ecfde..f8495de 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpdec.html
@@ -87,7 +87,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18422528"></a><h3>Element Information</h3>
+<a name="idp17158784"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -110,7 +110,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15775200"></a><h3>Element Pads</h3>
+<a name="idp19145984"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html
index 17c742f..fd39092 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpj2kpay.html
@@ -51,7 +51,7 @@
+----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload">GstRTPBasePayload</a>
+ +----GstRTPBasePayload
+----GstRtpJ2KPay
</pre>
</div>
@@ -75,7 +75,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15023856"></a><h3>Element Information</h3>
+<a name="idp19010752"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -98,7 +98,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15432080"></a><h3>Element Pads</h3>
+<a name="idp17027424"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html
index d121db5..73a406f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html
@@ -82,7 +82,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15909456"></a><h3>Element Information</h3>
+<a name="idp14811488"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -105,7 +105,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17936192"></a><h3>Element Pads</h3>
+<a name="idp17208800"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html
index 30b6340..a1bf28a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjpegpay.html
@@ -51,7 +51,7 @@
+----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload">GstRTPBasePayload</a>
+ +----GstRTPBasePayload
+----GstRtpJPEGPay
</pre>
</div>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19262176"></a><h3>Element Information</h3>
+<a name="idp15939184"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16372944"></a><h3>Element Pads</h3>
+<a name="idp18477600"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html
index 6ad4019..859afbd 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18333344"></a><h3>Element Information</h3>
+<a name="idp17960880"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18026816"></a><h3>Element Pads</h3>
+<a name="idp19988096"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html
index 6193057..b42a783 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html
@@ -93,7 +93,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp20768944"></a><h3>Element Information</h3>
+<a name="idp18754992"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -116,7 +116,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9068560"></a><h3>Element Pads</h3>
+<a name="idp15781728"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html
index 3438f8a..dbf0070 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html
@@ -67,7 +67,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18338576"></a><h3>Element Information</h3>
+<a name="idp16913344"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -90,7 +90,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17846320"></a><h3>Element Pads</h3>
+<a name="idp9722384"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
index 32fffd1..d24212d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
@@ -120,7 +120,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp16812576"></a><h3>Example launch line</h3>
+<a name="idp19933040"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -142,7 +142,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16968336"></a><h3>Element Information</h3>
+<a name="idp19780176"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -165,7 +165,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14126928"></a><h3>Element Pads</h3>
+<a name="idp16008368"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html b/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html
index 3c55c32..63cb1e7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-shagadelictv.html
@@ -62,7 +62,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp11613744"></a><h3>Example launch line</h3>
+<a name="idp19823328"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19951856"></a><h3>Element Information</h3>
+<a name="idp10051232"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19820576"></a><h3>Element Pads</h3>
+<a name="idp17856288"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html
index 6b8b6da..5e2628d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-shapewipe.html
@@ -77,7 +77,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp19928560"></a><h3>Example launch line</h3>
+<a name="idp17990864"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -95,7 +95,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13802976"></a><h3>Element Information</h3>
+<a name="idp19575648"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17159696"></a><h3>Element Pads</h3>
+<a name="idp18799072"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-smpte.html
index 1b5e32f..1911238 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-smpte.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-smpte.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp16930224"></a><h3>Sample pipelines</h3>
+<a name="idp10946432"></a><h3>Sample pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -101,7 +101,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15005712"></a><h3>Element Information</h3>
+<a name="idp20619216"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -124,7 +124,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp15773936"></a><h3>Element Pads</h3>
+<a name="idp18176672"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html b/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html
index 429b473..957b690 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-smptealpha.html
@@ -87,7 +87,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp17815568"></a><h3>Sample pipelines</h3>
+<a name="idp17131920"></a><h3>Sample pipelines</h3>
<p>
Here is a pipeline to demonstrate the smpte transition :
</p>
@@ -106,7 +106,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17461872"></a><h3>Element Information</h3>
+<a name="idp16816768"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -129,7 +129,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp20163440"></a><h3>Element Pads</h3>
+<a name="idp20958128"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html b/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html
index 31220a7..1cc9c09 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-souphttpsrc.html
@@ -91,7 +91,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18458304"></a><h3>Element Information</h3>
+<a name="idp19864112"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -114,7 +114,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16526672"></a><h3>Element Pads</h3>
+<a name="idp15376432"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-spectrum.html
index 5f63d61..7ae5369 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-spectrum.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-spectrum.html
@@ -132,7 +132,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp18637312"></a><h3>Example application</h3>
+<a name="idp22892608"></a><h3>Example application</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -399,7 +399,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21504352"></a><h3>Element Information</h3>
+<a name="idp19860928"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -422,7 +422,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19198720"></a><h3>Element Pads</h3>
+<a name="idp22422640"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-speexdec.html b/docs/plugins/html/gst-plugins-good-plugins-speexdec.html
index 977741c..9dcddcc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-speexdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-speexdec.html
@@ -66,7 +66,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19233488"></a><h3>Element Information</h3>
+<a name="idp22237456"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -89,7 +89,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17066736"></a><h3>Element Pads</h3>
+<a name="idp19549824"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-speexenc.html b/docs/plugins/html/gst-plugins-good-plugins-speexenc.html
index f2ae642..f5443b9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-speexenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-speexenc.html
@@ -83,7 +83,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18777776"></a><h3>Element Information</h3>
+<a name="idp18580720"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -106,7 +106,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp20790096"></a><h3>Element Pads</h3>
+<a name="idp22106928"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html b/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html
index 575a4ac..5f7f44c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-splitfilesrc.html
@@ -77,25 +77,36 @@
<p>
</p>
<div class="refsect2">
-<a name="idp22243216"></a><h3>Example launch line</h3>
+<a name="idp16789024"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="listing_lines" align="right"><pre>1</pre></td>
- <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch splitfilesrc location<span class="gtkdoc opt">=</span><span class="string">"/path/to/part-*.mpg"</span> <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">! ...</span> \</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch splitfilesrc location<span class="gtkdoc opt">=</span><span class="string">"/path/to/part-*.mpg"</span> <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">! ...</span></pre></td>
</tr>
</tbody>
</table>
</div>
Plays the different parts as if they were one single MPEG file.
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1</pre></td>
+ <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch playbin uri<span class="gtkdoc opt">=</span><span class="string">"splitfile://path/to/foo.avi.*"</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+ Plays the different parts as if they were one single AVI file.
</div>
<p>
</p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16819744"></a><h3>Element Information</h3>
+<a name="idp20089056"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +129,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp22268880"></a><h3>Element Pads</h3>
+<a name="idp19955104"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-streaktv.html b/docs/plugins/html/gst-plugins-good-plugins-streaktv.html
index c0e10da..7f55a2e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-streaktv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-streaktv.html
@@ -70,7 +70,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp18778064"></a><h3>Example launch line</h3>
+<a name="idp22225152"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -88,7 +88,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17921024"></a><h3>Element Information</h3>
+<a name="idp16626048"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -111,7 +111,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18701600"></a><h3>Element Pads</h3>
+<a name="idp18885472"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-taginject.html b/docs/plugins/html/gst-plugins-good-plugins-taginject.html
index 0363016..ac459f3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-taginject.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-taginject.html
@@ -70,7 +70,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp22819360"></a><h3>Example launch lines</h3>
+<a name="idp18581328"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -99,7 +99,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18904192"></a><h3>Element Information</h3>
+<a name="idp11157696"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -122,7 +122,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17806352"></a><h3>Element Pads</h3>
+<a name="idp20668656"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-udpsink.html b/docs/plugins/html/gst-plugins-good-plugins-udpsink.html
index cd14929..97a9d84 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-udpsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-udpsink.html
@@ -80,7 +80,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp15516560"></a><h3>Examples</h3>
+<a name="idp3071616"></a><h3>Examples</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16561840"></a><h3>Element Information</h3>
+<a name="idp22393792"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18907088"></a><h3>Element Pads</h3>
+<a name="idp18345792"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html b/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html
index cfc8db7..4dbb760 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-udpsrc.html
@@ -160,7 +160,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp21272048"></a><h3>Examples</h3>
+<a name="idp22467472"></a><h3>Examples</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -206,7 +206,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19556576"></a><h3>Element Information</h3>
+<a name="idp22547968"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -229,7 +229,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp21319664"></a><h3>Element Pads</h3>
+<a name="idp22500000"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html
index cd50b22..4ce6846 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2radio.html
@@ -74,7 +74,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21518464"></a><h3>Element Information</h3>
+<a name="idp19448208"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -97,7 +97,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp20192112"></a><h3>Element Pads</h3>
+<a name="idp21862112"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html
index 5ac2d37..7bc5bb4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2sink.html
@@ -62,7 +62,7 @@
<a name="gst-plugins-good-plugins-v4l2sink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
<p>
GstV4l2Sink implements
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gsttuner.html#GstTuner">GstTuner</a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay">GstVideoOverlay</a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">GstColorBalance</a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation">GstVideoOrientation</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gsttuner.html#GstTuner">GstTuner</a>, GstVideoOverlay, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">GstColorBalance</a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation">GstVideoOrientation</a>.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-good-plugins-v4l2sink.properties"></a><h2>Properties</h2>
@@ -94,7 +94,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21397760"></a><h3>Element Information</h3>
+<a name="idp16913024"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -117,7 +117,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16891888"></a><h3>Element Pads</h3>
+<a name="idp21633392"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html b/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html
index 9145577..7e353b3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-v4l2src.html
@@ -95,7 +95,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19246304"></a><h3>Element Information</h3>
+<a name="idp18072752"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14972000"></a><h3>Element Pads</h3>
+<a name="idp21393312"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html b/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html
index aacdcea..adfc5c6 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-vertigotv.html
@@ -79,7 +79,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp18881200"></a><h3>Example launch line</h3>
+<a name="idp23553024"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -97,7 +97,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17294656"></a><h3>Element Information</h3>
+<a name="idp19179520"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -120,7 +120,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp21864656"></a><h3>Element Pads</h3>
+<a name="idp21506112"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videobalance.html b/docs/plugins/html/gst-plugins-good-plugins-videobalance.html
index 5ce27a4..7e15580 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videobalance.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videobalance.html
@@ -81,7 +81,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp19492112"></a><h3>Example launch line</h3>
+<a name="idp22055584"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -103,7 +103,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21329760"></a><h3>Element Information</h3>
+<a name="idp18622896"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -126,7 +126,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17245296"></a><h3>Element Pads</h3>
+<a name="idp21859952"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-videobox.html
index 13dd11a..65ccc7d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videobox.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videobox.html
@@ -122,7 +122,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp23145904"></a><h3>Element Information</h3>
+<a name="idp20363008"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -145,7 +145,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp22489632"></a><h3>Element Pads</h3>
+<a name="idp24371136"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-videocrop.html
index a97868d..1fd966c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videocrop.html
@@ -91,7 +91,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp22560576"></a><h3>Example launch line</h3>
+<a name="idp16561088"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -109,7 +109,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19679072"></a><h3>Element Information</h3>
+<a name="idp24392016"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -132,7 +132,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp21264960"></a><h3>Element Pads</h3>
+<a name="idp19751408"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
index 1b7d5c3..e4b32d0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
@@ -71,7 +71,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp19600080"></a><h3>Example launch line</h3>
+<a name="idp22740720"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -92,7 +92,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5522368"></a><h3>Element Information</h3>
+<a name="idp23680176"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -115,7 +115,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16687744"></a><h3>Element Pads</h3>
+<a name="idp24428704"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-videomixer.html
index 6f48030..cf487b9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videomixer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videomixer.html
@@ -59,7 +59,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp23886704"></a><h3>Sample pipelines</h3>
+<a name="idp21583136"></a><h3>Sample pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -160,7 +160,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp23762656"></a><h3>Element Information</h3>
+<a name="idp15210672"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -183,7 +183,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16908720"></a><h3>Element Pads</h3>
+<a name="idp17254032"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-warptv.html b/docs/plugins/html/gst-plugins-good-plugins-warptv.html
index f72d18a..97dc50e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-warptv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-warptv.html
@@ -62,7 +62,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp20134176"></a><h3>Example launch line</h3>
+<a name="idp21833952"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp20859648"></a><h3>Element Information</h3>
+<a name="idp17943440"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp22745664"></a><h3>Element Pads</h3>
+<a name="idp22009536"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html b/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html
index 7803249..d5988ab 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-waveformsink.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21828608"></a><h3>Element Information</h3>
+<a name="idp24407968"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -68,7 +68,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp23069872"></a><h3>Element Pads</h3>
+<a name="idp18153312"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-wavenc.html
index 75bef15..e3294c1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavenc.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp22184928"></a><h3>Element Information</h3>
+<a name="idp23292704"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19908336"></a><h3>Element Pads</h3>
+<a name="idp23280992"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html
index f4a549b..e68bfa4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackdec.html
@@ -58,7 +58,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13004288"></a><h3>Element Information</h3>
+<a name="idp22579248"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -81,7 +81,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp22012256"></a><h3>Element Pads</h3>
+<a name="idp20026976"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html
index 817e008..4a4206a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackenc.html
@@ -80,7 +80,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2320880"></a><h3>Element Information</h3>
+<a name="idp21401344"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp21195552"></a><h3>Element Pads</h3>
+<a name="idp22125760"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
index e2035e0..a11eb14 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
@@ -61,7 +61,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp23728944"></a><h3>Example launch line</h3>
+<a name="idp24376096"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8829824"></a><h3>Element Information</h3>
+<a name="idp20254752"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp17510176"></a><h3>Element Pads</h3>
+<a name="idp13848544"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
index 71d7ce7..099a5f2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
@@ -72,7 +72,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp22784432"></a><h3>Example launch line</h3>
+<a name="idp21427840"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -105,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp23820656"></a><h3>Element Information</h3>
+<a name="idp23384256"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -128,7 +128,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp23731424"></a><h3>Element Pads</h3>
+<a name="idp24161712"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-webmmux.html b/docs/plugins/html/gst-plugins-good-plugins-webmmux.html
index fbe12d5..4c6e4b0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-webmmux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-webmmux.html
@@ -59,7 +59,7 @@
<a name="gst-plugins-good-plugins-webmmux.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
<p>
GstWebMMux implements
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTocSetter.html#GstTocSetter">GstTocSetter</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and GstTocSetter.</p>
</div>
<div class="refsect1">
<a name="gst-plugins-good-plugins-webmmux.description"></a><h2>Description</h2>
@@ -69,7 +69,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp21854480"></a><h3>Example launch line</h3>
+<a name="idp22537760"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -108,7 +108,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21557888"></a><h3>Element Information</h3>
+<a name="idp21435968"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -131,7 +131,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp21767952"></a><h3>Element Pads</h3>
+<a name="idp22051392"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html
index 8e0b030..0c8b3b0 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ximagesrc.html
@@ -77,7 +77,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp23579168"></a><h3>Element Information</h3>
+<a name="idp22141536"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -100,7 +100,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp23595360"></a><h3>Element Pads</h3>
+<a name="idp24512224"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-y4menc.html
index f07d99e..94f1bef 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-y4menc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-y4menc.html
@@ -57,7 +57,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp23695536"></a><h3>Example launch line</h3>
+<a name="idp23366304"></a><h3>Example launch line</h3>
<p>
Creates a YU4MPEG2 raw video stream as defined by the mjpegtools project.
</p>
@@ -77,7 +77,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19658528"></a><h3>Element Information</h3>
+<a name="idp22138016"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -100,7 +100,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14827680"></a><h3>Element Pads</h3>
+<a name="idp23763952"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-good-plugins.devhelp2 b/docs/plugins/html/gst-plugins-good-plugins.devhelp2
index ae6cc98..1357942 100644
--- a/docs/plugins/html/gst-plugins-good-plugins.devhelp2
+++ b/docs/plugins/html/gst-plugins-good-plugins.devhelp2
@@ -240,15 +240,15 @@
</sub>
</chapters>
<functions>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-3gppmux.html#idp8328720"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-3gppmux.html#idp6518336"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-3gppmux.html#idp6229168"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aacparse.html#idp9559600"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aacparse.html#idp6596800"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aacparse.html#idp7982560"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-3gppmux.html#idp6208480"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-3gppmux.html#idp7337184"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-3gppmux.html#idp6801616"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aacparse.html#idm36816"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aacparse.html#idp8750912"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aacparse.html#idp8802736"/>
<keyword type="struct" name="struct GstAacParse" link="gst-plugins-good-plugins-aacparse.html#GstAacParse-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aasink.html#idp8268384"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aasink.html#idp7952176"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aasink.html#idm31792"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aasink.html#idp7012192"/>
<keyword type="struct" name="struct GstAASink" link="gst-plugins-good-plugins-aasink.html#GstAASink-struct"/>
<keyword type="property" name="The "brightness" property" link="gst-plugins-good-plugins-aasink.html#GstAASink--brightness"/>
<keyword type="property" name="The "contrast" property" link="gst-plugins-good-plugins-aasink.html#GstAASink--contrast"/>
@@ -263,20 +263,20 @@
<keyword type="property" name="The "width" property" link="gst-plugins-good-plugins-aasink.html#GstAASink--width"/>
<keyword type="signal" name="The "frame-displayed" signal" link="gst-plugins-good-plugins-aasink.html#GstAASink-frame-displayed"/>
<keyword type="signal" name="The "have-size" signal" link="gst-plugins-good-plugins-aasink.html#GstAASink-have-size"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-ac3parse.html#idp9335856"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ac3parse.html#idp6399376"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ac3parse.html#idp7492656"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-ac3parse.html#idp7867424"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ac3parse.html#idp8374016"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ac3parse.html#idp6397712"/>
<keyword type="struct" name="struct GstAc3Parse" link="gst-plugins-good-plugins-ac3parse.html#GstAc3Parse-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-agingtv.html#idp9746128"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-agingtv.html#idp5701344"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-agingtv.html#idp9838144"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-agingtv.html#idp6010544"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-agingtv.html#idp9026096"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-agingtv.html#idp7914864"/>
<keyword type="struct" name="struct GstAgingTV" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV-struct"/>
<keyword type="property" name="The "color-aging" property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--color-aging"/>
<keyword type="property" name="The "dusts" property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--dusts"/>
<keyword type="property" name="The "pits" property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--pits"/>
<keyword type="property" name="The "scratch-lines" property" link="gst-plugins-good-plugins-agingtv.html#GstAgingTV--scratch-lines"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alpha.html#idp6436096"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alpha.html#idp10122416"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alpha.html#idp7104224"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alpha.html#idp8954032"/>
<keyword type="struct" name="struct GstAlpha" link="gst-plugins-good-plugins-alpha.html#GstAlpha-struct"/>
<keyword type="enum" name="enum GstAlphaMethod" link="gst-plugins-good-plugins-alpha.html#GstAlphaMethod"/>
<keyword type="property" name="The "alpha" property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--alpha"/>
@@ -289,41 +289,41 @@
<keyword type="property" name="The "black-sensitivity" property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--black-sensitivity"/>
<keyword type="property" name="The "white-sensitivity" property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--white-sensitivity"/>
<keyword type="property" name="The "prefer-passthrough" property" link="gst-plugins-good-plugins-alpha.html#GstAlpha--prefer-passthrough"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alphacolor.html#idp5533136"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alphacolor.html#idp9398432"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alphacolor.html#idp7941184"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alphacolor.html#idp9874768"/>
<keyword type="struct" name="struct GstAlphaColor" link="gst-plugins-good-plugins-alphacolor.html#GstAlphaColor-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawdec.html#idp5919136"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawdec.html#idp9205920"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawdec.html#idp7081440"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawdec.html#idp9270640"/>
<keyword type="struct" name="struct GstALawDec" link="gst-plugins-good-plugins-alawdec.html#GstALawDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawenc.html#idp7084208"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawenc.html#idp7973840"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-alawenc.html#idp10540240"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-alawenc.html#idp7069712"/>
<keyword type="struct" name="struct GstALawDec" link="gst-plugins-good-plugins-alawenc.html#GstALawDec-struct"/>
<keyword type="struct" name="struct GstALawEnc" link="gst-plugins-good-plugins-alawenc.html#GstALawEnc"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-amrparse.html#idp7826944"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-amrparse.html#idp8715728"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-amrparse.html#idm32288"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-amrparse.html#idp9300272"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-amrparse.html#idp6211120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-amrparse.html#idp5694032"/>
<keyword type="struct" name="struct GstAmrParse" link="gst-plugins-good-plugins-amrparse.html#GstAmrParse-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-apedemux.html#idp9161520"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apedemux.html#idp8269344"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apedemux.html#idp7065776"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-apedemux.html#idp6139904"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apedemux.html#idp8599248"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apedemux.html#idp9243584"/>
<keyword type="struct" name="struct GstApeDemux" link="gst-plugins-good-plugins-apedemux.html#GstApeDemux-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apev2mux.html#idp5917840"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apev2mux.html#idp6930672"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-apev2mux.html#idp6430144"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-apev2mux.html#idp7787728"/>
<keyword type="struct" name="struct GstApev2Mux" link="gst-plugins-good-plugins-apev2mux.html#GstApev2Mux-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8880032"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aspectratiocrop.html#idp10181968"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8844816"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-aspectratiocrop.html#idp7151824"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8094240"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-aspectratiocrop.html#idp8295296"/>
<keyword type="struct" name="struct GstAspectRatioCrop" link="gst-plugins-good-plugins-aspectratiocrop.html#GstAspectRatioCrop-struct"/>
<keyword type="property" name="The "aspect-ratio" property" link="gst-plugins-good-plugins-aspectratiocrop.html#GstAspectRatioCrop--aspect-ratio"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioamplify.html#idp9991504"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioamplify.html#idp8439776"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioamplify.html#idp8274080"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioamplify.html#idp6603536"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioamplify.html#idp9960256"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioamplify.html#idp8943104"/>
<keyword type="struct" name="struct GstAudioAmplify" link="gst-plugins-good-plugins-audioamplify.html#GstAudioAmplify-struct"/>
<keyword type="property" name="The "amplification" property" link="gst-plugins-good-plugins-audioamplify.html#GstAudioAmplify--amplification"/>
<keyword type="property" name="The "clipping-method" property" link="gst-plugins-good-plugins-audioamplify.html#GstAudioAmplify--clipping-method"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiochebband.html#idp8513472"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiochebband.html#idp8843520"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiochebband.html#idp7544080"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiochebband.html#idp9953952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiochebband.html#idp3032128"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiochebband.html#idp9402576"/>
<keyword type="struct" name="struct GstAudioChebBand" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand-struct"/>
<keyword type="property" name="The "lower-frequency" property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--lower-frequency"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--mode"/>
@@ -331,127 +331,127 @@
<keyword type="property" name="The "ripple" property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--ripple"/>
<keyword type="property" name="The "type" property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--type"/>
<keyword type="property" name="The "upper-frequency" property" link="gst-plugins-good-plugins-audiochebband.html#GstAudioChebBand--upper-frequency"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiocheblimit.html#idp6782368"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiocheblimit.html#idp8527136"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiocheblimit.html#idp7678736"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiocheblimit.html#idp10597408"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiocheblimit.html#idp9915776"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiocheblimit.html#idp3247456"/>
<keyword type="struct" name="struct GstAudioChebLimit" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit-struct"/>
<keyword type="property" name="The "cutoff" property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--cutoff"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--mode"/>
<keyword type="property" name="The "poles" property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--poles"/>
<keyword type="property" name="The "ripple" property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--ripple"/>
<keyword type="property" name="The "type" property" link="gst-plugins-good-plugins-audiocheblimit.html#GstAudioChebLimit--type"/>
- <keyword type="" name="Example application" link="gst-plugins-good-plugins-audiofirfilter.html#idp11231552"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiofirfilter.html#idp9528224"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiofirfilter.html#idp10238000"/>
+ <keyword type="" name="Example application" link="gst-plugins-good-plugins-audiofirfilter.html#idp10441424"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiofirfilter.html#idp5885264"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiofirfilter.html#idp10140592"/>
<keyword type="struct" name="struct GstAudioFIRFilter" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter-struct"/>
<keyword type="property" name="The "kernel" property" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter--kernel"/>
<keyword type="property" name="The "latency" property" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter--latency"/>
<keyword type="signal" name="The "rate-changed" signal" link="gst-plugins-good-plugins-audiofirfilter.html#GstAudioFIRFilter-rate-changed"/>
- <keyword type="" name="Example application" link="gst-plugins-good-plugins-audioiirfilter.html#idp9177520"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioiirfilter.html#idp2790368"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioiirfilter.html#idp6233376"/>
+ <keyword type="" name="Example application" link="gst-plugins-good-plugins-audioiirfilter.html#idp9331104"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioiirfilter.html#idp10067568"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioiirfilter.html#idp8333056"/>
<keyword type="struct" name="struct GstAudioIIRFilter" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter-struct"/>
<keyword type="property" name="The "a" property" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter--a"/>
<keyword type="property" name="The "b" property" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter--b"/>
<keyword type="signal" name="The "rate-changed" signal" link="gst-plugins-good-plugins-audioiirfilter.html#GstAudioIIRFilter-rate-changed"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsincband.html#idp8942528"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsincband.html#idp8261168"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsincband.html#idp6138256"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsincband.html#idp10887712"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsincband.html#idp8194096"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsincband.html#idp6437056"/>
<keyword type="struct" name="struct GstAudioWSincBand" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand-struct"/>
<keyword type="property" name="The "lower-frequency" property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--lower-frequency"/>
<keyword type="property" name="The "upper-frequency" property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--upper-frequency"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--mode"/>
<keyword type="property" name="The "window" property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--window"/>
<keyword type="property" name="The "length" property" link="gst-plugins-good-plugins-audiowsincband.html#GstAudioWSincBand--length"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6850720"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsinclimit.html#idp10982944"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6873056"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiowsinclimit.html#idp9529936"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6156448"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiowsinclimit.html#idp6200064"/>
<keyword type="struct" name="struct GstAudioWSincLimit" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit-struct"/>
<keyword type="property" name="The "frequency" property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--frequency"/>
<keyword type="property" name="The "length" property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--length"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--mode"/>
<keyword type="property" name="The "window" property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--window"/>
<keyword type="property" name="The "cutoff" property" link="gst-plugins-good-plugins-audiowsinclimit.html#GstAudioWSincLimit--cutoff"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioecho.html#idp8803856"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioecho.html#idp8686672"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioecho.html#idp9744128"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioecho.html#idp8473856"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioecho.html#idp9602064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioecho.html#idp7672608"/>
<keyword type="struct" name="struct GstAudioEcho" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho-struct"/>
<keyword type="property" name="The "delay" property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--delay"/>
<keyword type="property" name="The "feedback" property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--feedback"/>
<keyword type="property" name="The "intensity" property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--intensity"/>
<keyword type="property" name="The "max-delay" property" link="gst-plugins-good-plugins-audioecho.html#GstAudioEcho--max-delay"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiodynamic.html#idp10827520"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiodynamic.html#idp9888192"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiodynamic.html#idp7949072"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiodynamic.html#idp10382224"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiodynamic.html#idp8946464"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiodynamic.html#idp8596896"/>
<keyword type="struct" name="struct GstAudioDynamic" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic-struct"/>
<keyword type="property" name="The "characteristics" property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--characteristics"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--mode"/>
<keyword type="property" name="The "ratio" property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--ratio"/>
<keyword type="property" name="The "threshold" property" link="gst-plugins-good-plugins-audiodynamic.html#GstAudioDynamic--threshold"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioinvert.html#idp10929664"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioinvert.html#idp8620496"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioinvert.html#idp7399888"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audioinvert.html#idp7039232"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audioinvert.html#idp6695536"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audioinvert.html#idp8506064"/>
<keyword type="struct" name="struct GstAudioInvert" link="gst-plugins-good-plugins-audioinvert.html#GstAudioInvert-struct"/>
<keyword type="property" name="The "degree" property" link="gst-plugins-good-plugins-audioinvert.html#GstAudioInvert--degree"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiopanorama.html#idp10565616"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiopanorama.html#idp7714992"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiopanorama.html#idp6869376"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiopanorama.html#idp5513024"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiopanorama.html#idp6296928"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiopanorama.html#idp6983920"/>
<keyword type="struct" name="struct GstAudioPanorama" link="gst-plugins-good-plugins-audiopanorama.html#GstAudioPanorama-struct"/>
<keyword type="property" name="The "panorama" property" link="gst-plugins-good-plugins-audiopanorama.html#GstAudioPanorama--panorama"/>
<keyword type="property" name="The "method" property" link="gst-plugins-good-plugins-audiopanorama.html#GstAudioPanorama--method"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiokaraoke.html#idp4884352"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiokaraoke.html#idp6238576"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiokaraoke.html#idm6320"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-audiokaraoke.html#idp10895824"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-audiokaraoke.html#idp7677984"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-audiokaraoke.html#idp11370864"/>
<keyword type="struct" name="struct GstAudioKaraoke" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke-struct"/>
<keyword type="property" name="The "filter-band" property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--filter-band"/>
<keyword type="property" name="The "filter-width" property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--filter-width"/>
<keyword type="property" name="The "level" property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--level"/>
<keyword type="property" name="The "mono-level" property" link="gst-plugins-good-plugins-audiokaraoke.html#GstAudioKaraoke--mono-level"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-auparse.html#idp6093648"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-auparse.html#idp9170592"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-auparse.html#idp7607904"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-auparse.html#idp6357424"/>
<keyword type="struct" name="struct GstAuParse" link="gst-plugins-good-plugins-auparse.html#GstAuParse-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosink.html#idp5485152"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosink.html#idp10627184"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosink.html#idp9738464"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosink.html#idp10370240"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosink.html#idp11529200"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosink.html#idp10476704"/>
<keyword type="struct" name="GstAutoAudioSink" link="gst-plugins-good-plugins-autoaudiosink.html#GstAutoAudioSink-struct"/>
<keyword type="property" name="The "filter-caps" property" link="gst-plugins-good-plugins-autoaudiosink.html#GstAutoAudioSink--filter-caps"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosrc.html#idp11817920"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosrc.html#idp1882064"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosrc.html#idp6081344"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autoaudiosrc.html#idp11808896"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autoaudiosrc.html#idp5886352"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autoaudiosrc.html#idp9690384"/>
<keyword type="struct" name="GstAutoAudioSrc" link="gst-plugins-good-plugins-autoaudiosrc.html#GstAutoAudioSrc-struct"/>
<keyword type="property" name="The "filter-caps" property" link="gst-plugins-good-plugins-autoaudiosrc.html#GstAutoAudioSrc--filter-caps"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosink.html#idp7435376"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosink.html#idp5800176"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosink.html#idp6481776"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosink.html#idp5681712"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosink.html#idp6214064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosink.html#idp10000336"/>
<keyword type="struct" name="GstAutoVideoSink" link="gst-plugins-good-plugins-autovideosink.html#GstAutoVideoSink-struct"/>
<keyword type="property" name="The "filter-caps" property" link="gst-plugins-good-plugins-autovideosink.html#GstAutoVideoSink--filter-caps"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosrc.html#idp8726784"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosrc.html#idp11712912"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosrc.html#idp11996464"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-autovideosrc.html#idp10345152"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-autovideosrc.html#idp6985808"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-autovideosrc.html#idp11128192"/>
<keyword type="struct" name="GstAutoVideoSrc" link="gst-plugins-good-plugins-autovideosrc.html#GstAutoVideoSrc-struct"/>
<keyword type="property" name="The "filter-caps" property" link="gst-plugins-good-plugins-autovideosrc.html#GstAutoVideoSrc--filter-caps"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avidemux.html#idp11770896"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avidemux.html#idp11768592"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avidemux.html#idp7449344"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avidemux.html#idp11919536"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avidemux.html#idp11916336"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avidemux.html#idp11910560"/>
<keyword type="struct" name="GstAviDemux" link="gst-plugins-good-plugins-avidemux.html#GstAviDemux-struct"/>
- <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-avimux.html#idp6898096"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avimux.html#idp11140432"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avimux.html#idp11273712"/>
+ <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-avimux.html#idp10785168"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avimux.html#idp12289696"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avimux.html#idp8587312"/>
<keyword type="struct" name="struct GstAviMux" link="gst-plugins-good-plugins-avimux.html#GstAviMux-struct"/>
<keyword type="property" name="The "bigfile" property" link="gst-plugins-good-plugins-avimux.html#GstAviMux--bigfile"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avisubtitle.html#idp8874720"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avisubtitle.html#idp6866848"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avisubtitle.html#idp9114720"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-avisubtitle.html#idp7956672"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-avisubtitle.html#idp8915120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-avisubtitle.html#idp8892544"/>
<keyword type="struct" name="struct GstAviSubtitle" link="gst-plugins-good-plugins-avisubtitle.html#GstAviSubtitle-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cacasink.html#idp8935536"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cacasink.html#idp11904096"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cacasink.html#idp8684768"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cacasink.html#idp12125760"/>
<keyword type="struct" name="struct GstCACASink" link="gst-plugins-good-plugins-cacasink.html#GstCACASink-struct"/>
<keyword type="property" name="The "anti-aliasing" property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--anti-aliasing"/>
<keyword type="property" name="The "dither" property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--dither"/>
<keyword type="property" name="The "screen-height" property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--screen-height"/>
<keyword type="property" name="The "screen-width" property" link="gst-plugins-good-plugins-cacasink.html#GstCACASink--screen-width"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotextoverlay.html#idp9043296"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotextoverlay.html#idp2670656"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotextoverlay.html#idp7298480"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotextoverlay.html#idp3251584"/>
<keyword type="struct" name="struct GstCairoTextOverlay" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay"/>
<keyword type="property" name="The "deltax" property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--deltax"/>
<keyword type="property" name="The "deltay" property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--deltay"/>
@@ -463,40 +463,40 @@
<keyword type="property" name="The "xpad" property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--xpad"/>
<keyword type="property" name="The "ypad" property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--ypad"/>
<keyword type="property" name="The "silent" property" link="gst-plugins-good-plugins-cairotextoverlay.html#GstCairoTextOverlay--silent"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp9081552"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp5598848"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp10005120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairotimeoverlay.html#idp5840592"/>
<keyword type="struct" name="GstCairoTimeOverlay" link="gst-plugins-good-plugins-cairotimeoverlay.html#GstCairoTimeOverlay"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairorender.html#idp12788464"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairorender.html#idp5654080"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairorender.html#idp12819152"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairorender.html#idp10143968"/>
<keyword type="struct" name="struct GstCairoRender" link="gst-plugins-good-plugins-cairorender.html#GstCairoRender"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairooverlay.html#idp5975568"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairooverlay.html#idp6409152"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cairooverlay.html#idp6310128"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cairooverlay.html#idp6294288"/>
<keyword type="struct" name="struct GstCairoOverlay" link="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay"/>
<keyword type="signal" name="The "caps-changed" signal" link="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay-caps-changed"/>
<keyword type="signal" name="The "draw" signal" link="gst-plugins-good-plugins-cairooverlay.html#GstCairoOverlay-draw"/>
- <keyword type="" name="" link="gst-plugins-good-plugins-capssetter.html#idp11329776"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-capssetter.html#idp9102800"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-capssetter.html#idp13297232"/>
+ <keyword type="" name="" link="gst-plugins-good-plugins-capssetter.html#idp10973136"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-capssetter.html#idp7929248"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-capssetter.html#idp7803568"/>
<keyword type="struct" name="struct GstCapsSetter" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter-struct"/>
<keyword type="property" name="The "caps" property" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--caps"/>
<keyword type="property" name="The "join" property" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--join"/>
<keyword type="property" name="The "replace" property" link="gst-plugins-good-plugins-capssetter.html#GstCapsSetter--replace"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-cutter.html#idp6357504"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cutter.html#idp11153952"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cutter.html#idp5732816"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-cutter.html#idp10854432"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-cutter.html#idp9904912"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-cutter.html#idp6219408"/>
<keyword type="struct" name="struct GstCutter" link="gst-plugins-good-plugins-cutter.html#GstCutter-struct"/>
<keyword type="property" name="The "leaky" property" link="gst-plugins-good-plugins-cutter.html#GstCutter--leaky"/>
<keyword type="property" name="The "pre-length" property" link="gst-plugins-good-plugins-cutter.html#GstCutter--pre-length"/>
<keyword type="property" name="The "run-length" property" link="gst-plugins-good-plugins-cutter.html#GstCutter--run-length"/>
<keyword type="property" name="The "threshold" property" link="gst-plugins-good-plugins-cutter.html#GstCutter--threshold"/>
<keyword type="property" name="The "threshold-dB" property" link="gst-plugins-good-plugins-cutter.html#GstCutter--threshold-dB"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dcaparse.html#idp8712592"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dcaparse.html#idp6418704"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dcaparse.html#idp11837600"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dcaparse.html#idp3197584"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dcaparse.html#idp7912928"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dcaparse.html#idp13422640"/>
<keyword type="struct" name="struct GstDcaParse" link="gst-plugins-good-plugins-dcaparse.html#GstDcaParse-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterlace.html#idp9660032"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterlace.html#idp8786960"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterlace.html#idp7331136"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterlace.html#idp8497696"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterlace.html#idp12195232"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterlace.html#idp11827840"/>
<keyword type="struct" name="struct GstDeinterlace" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace"/>
<keyword type="property" name="The "fields" property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--fields"/>
<keyword type="property" name="The "method" property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--method"/>
@@ -505,22 +505,22 @@
<keyword type="property" name="The "drop-orphans" property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--drop-orphans"/>
<keyword type="property" name="The "ignore-obscure" property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--ignore-obscure"/>
<keyword type="property" name="The "locking" property" link="gst-plugins-good-plugins-deinterlace.html#GstDeinterlace--locking"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterleave.html#idp10126080"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterleave.html#idp6979312"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterleave.html#idp2710896"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-deinterleave.html#idp6704656"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-deinterleave.html#idp12252000"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-deinterleave.html#idp8629856"/>
<keyword type="struct" name="struct GstDeinterleave" link="gst-plugins-good-plugins-deinterleave.html#GstDeinterleave-struct"/>
<keyword type="property" name="The "keep-positions" property" link="gst-plugins-good-plugins-deinterleave.html#GstDeinterleave--keep-positions"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dicetv.html#idp5734848"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dicetv.html#idp11133024"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dicetv.html#idp6606032"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-dicetv.html#idp8803504"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dicetv.html#idp10446672"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dicetv.html#idp13141264"/>
<keyword type="struct" name="struct GstDiceTV" link="gst-plugins-good-plugins-dicetv.html#GstDiceTV-struct"/>
<keyword type="property" name="The "square-bits" property" link="gst-plugins-good-plugins-dicetv.html#GstDiceTV--square-bits"/>
<keyword type="signal" name="The "reset" signal" link="gst-plugins-good-plugins-dicetv.html#GstDiceTV-reset"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-directsoundsink.html#idp4543536"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-directsoundsink.html#idp10870960"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-directsoundsink.html#idp10137824"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-directsoundsink.html#idp6414496"/>
<keyword type="struct" name="struct GstDirectSoundSink" link="gst-plugins-good-plugins-directsoundsink.html#GstDirectSoundSink"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dv1394src.html#idp11892656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dv1394src.html#idp10643440"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dv1394src.html#idp6847312"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dv1394src.html#idp8058960"/>
<keyword type="struct" name="struct GstDV1394Src" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src-struct"/>
<keyword type="property" name="The "channel" property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--channel"/>
<keyword type="property" name="The "consecutive" property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--consecutive"/>
@@ -531,23 +531,23 @@
<keyword type="property" name="The "use-avc" property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--use-avc"/>
<keyword type="property" name="The "device-name" property" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src--device-name"/>
<keyword type="signal" name="The "frame-dropped" signal" link="gst-plugins-good-plugins-dv1394src.html#GstDV1394Src-frame-dropped"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdec.html#idp11066512"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdec.html#idp11540880"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdec.html#idp6265136"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdec.html#idp6443520"/>
<keyword type="struct" name="struct GstDVDec" link="gst-plugins-good-plugins-dvdec.html#GstDVDec-struct"/>
<keyword type="property" name="The "clamp-chroma" property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--clamp-chroma"/>
<keyword type="property" name="The "clamp-luma" property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--clamp-luma"/>
<keyword type="property" name="The "drop-factor" property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--drop-factor"/>
<keyword type="property" name="The "quality" property" link="gst-plugins-good-plugins-dvdec.html#GstDVDec--quality"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdemux.html#idp2690912"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdemux.html#idp7547488"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-dvdemux.html#idp11131760"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-dvdemux.html#idp8973888"/>
<keyword type="struct" name="struct GstDVDemux" link="gst-plugins-good-plugins-dvdemux.html#GstDVDemux-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-edgetv.html#idp2704416"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-edgetv.html#idp7328208"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-edgetv.html#idp10036848"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-edgetv.html#idp9574256"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-edgetv.html#idp7723744"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-edgetv.html#idp10593904"/>
<keyword type="struct" name="struct GstEdgeTV" link="gst-plugins-good-plugins-edgetv.html#GstEdgeTV-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-10bands.html#idp12681408"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-10bands.html#idp6681536"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-10bands.html#idp13272720"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-10bands.html#idp14333376"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-10bands.html#idp5770256"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-10bands.html#idp7063392"/>
<keyword type="struct" name="struct GstIirEqualizer10Bands" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands-struct"/>
<keyword type="property" name="The "band0" property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band0"/>
<keyword type="property" name="The "band1" property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band1"/>
@@ -559,24 +559,24 @@
<keyword type="property" name="The "band7" property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band7"/>
<keyword type="property" name="The "band8" property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band8"/>
<keyword type="property" name="The "band9" property" link="gst-plugins-good-plugins-equalizer-10bands.html#GstIirEqualizer10Bands--band9"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-3bands.html#idp13457696"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-3bands.html#idp12006848"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-3bands.html#idp11650640"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-3bands.html#idp12467376"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-3bands.html#idp14230320"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-3bands.html#idp8724848"/>
<keyword type="struct" name="struct GstIirEqualizer3Bands" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands-struct"/>
<keyword type="property" name="The "band0" property" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands--band0"/>
<keyword type="property" name="The "band1" property" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands--band1"/>
<keyword type="property" name="The "band2" property" link="gst-plugins-good-plugins-equalizer-3bands.html#GstIirEqualizer3Bands--band2"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-nbands.html#idp12256624"/>
- <keyword type="" name="Example code" link="gst-plugins-good-plugins-equalizer-nbands.html#idp11701904"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-nbands.html#idp7105376"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-nbands.html#idp6945472"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-equalizer-nbands.html#idp8082352"/>
+ <keyword type="" name="Example code" link="gst-plugins-good-plugins-equalizer-nbands.html#idp10087056"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-equalizer-nbands.html#idp14304320"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-equalizer-nbands.html#idp12924512"/>
<keyword type="struct" name="struct GstIirEqualizerNBands" link="gst-plugins-good-plugins-equalizer-nbands.html#GstIirEqualizerNBands-struct"/>
<keyword type="property" name="The "num-bands" property" link="gst-plugins-good-plugins-equalizer-nbands.html#GstIirEqualizerNBands--num-bands"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacdec.html#idp8757696"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacdec.html#idp11093664"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacdec.html#idp5923824"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacdec.html#idp13413648"/>
<keyword type="struct" name="struct GstFlacDec" link="gst-plugins-good-plugins-flacdec.html#GstFlacDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacenc.html#idp5780272"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacenc.html#idp11581408"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacenc.html#idp14131424"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacenc.html#idp14122528"/>
<keyword type="struct" name="struct GstFlacEnc" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc-struct"/>
<keyword type="property" name="The "blocksize" property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--blocksize"/>
<keyword type="property" name="The "escape-coding" property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--escape-coding"/>
@@ -593,134 +593,134 @@
<keyword type="property" name="The "streamable-subset" property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--streamable-subset"/>
<keyword type="property" name="The "padding" property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--padding"/>
<keyword type="property" name="The "seekpoints" property" link="gst-plugins-good-plugins-flacenc.html#GstFlacEnc--seekpoints"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-flacparse.html#idp5278112"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacparse.html#idp9516336"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacparse.html#idp2264560"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-flacparse.html#idp11591312"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flacparse.html#idp8033664"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flacparse.html#idp9826528"/>
<keyword type="struct" name="struct GstFlacParse" link="gst-plugins-good-plugins-flacparse.html#GstFlacParse-struct"/>
<keyword type="property" name="The "check-frame-checksums" property" link="gst-plugins-good-plugins-flacparse.html#GstFlacParse--check-frame-checksums"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flactag.html#idp7725664"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flactag.html#idp11325344"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flactag.html#idp9078976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flactag.html#idp9347696"/>
<keyword type="struct" name="struct GstFlacTag" link="gst-plugins-good-plugins-flactag.html#GstFlacTag-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvdemux.html#idp8181024"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvdemux.html#idp11678112"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvdemux.html#idp5862512"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvdemux.html#idp9203600"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvdemux.html#idp13044864"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvdemux.html#idp9476576"/>
<keyword type="struct" name="struct GstFlvDemux" link="gst-plugins-good-plugins-flvdemux.html#GstFlvDemux-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvmux.html#idp11936272"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvmux.html#idp6450800"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvmux.html#idp10194192"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-flvmux.html#idp13147376"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flvmux.html#idp11327712"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flvmux.html#idp6870144"/>
<keyword type="struct" name="GstFlvMux" link="gst-plugins-good-plugins-flvmux.html#GstFlvMux-struct"/>
<keyword type="property" name="The "is-live" property" link="gst-plugins-good-plugins-flvmux.html#GstFlvMux--is-live"/>
<keyword type="property" name="The "streamable" property" link="gst-plugins-good-plugins-flvmux.html#GstFlvMux--streamable"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flxdec.html#idp8838624"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flxdec.html#idp9990176"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-flxdec.html#idp8967152"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-flxdec.html#idp13584480"/>
<keyword type="struct" name="struct GstFlxDec" link="gst-plugins-good-plugins-flxdec.html#GstFlxDec-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-gamma.html#idp7831248"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gamma.html#idp8374064"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gamma.html#idp11971904"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-gamma.html#idp11779792"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gamma.html#idp12452368"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gamma.html#idp8933504"/>
<keyword type="struct" name="struct GstGamma" link="gst-plugins-good-plugins-gamma.html#GstGamma-struct"/>
<keyword type="property" name="The "gamma" property" link="gst-plugins-good-plugins-gamma.html#GstGamma--gamma"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp10826272"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp11380528"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp6571584"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-gdkpixbufsink.html#idp11818064"/>
<keyword type="struct" name="struct GstGdkPixbufSink" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink"/>
<keyword type="property" name="The "last-pixbuf" property" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--last-pixbuf"/>
<keyword type="property" name="The "send-messages" property" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--send-messages"/>
<keyword type="property" name="The "post-messages" property" link="gst-plugins-good-plugins-gdkpixbufsink.html#GstGdkPixbufSink--post-messages"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom.html#idp13676048"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom.html#idp5812672"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom.html#idp10060656"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom.html#idp12894848"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom.html#idp7569040"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom.html#idp6657312"/>
<keyword type="struct" name="struct GstGoom" link="gst-plugins-good-plugins-goom.html#GstGoom-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom2k1.html#idp8087296"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom2k1.html#idp2828400"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom2k1.html#idp11687600"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-goom2k1.html#idp8895024"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-goom2k1.html#idp11762288"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-goom2k1.html#idp11626624"/>
<keyword type="struct" name="struct GstGoom" link="gst-plugins-good-plugins-goom2k1.html#GstGoom-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosink.html#idp14160688"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosink.html#idp14692672"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosrc.html#idp6929200"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosrc.html#idp13351728"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-hdv1394src.html#idp14566048"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-hdv1394src.html#idp11549312"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosink.html#idp9813296"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosink.html#idp12480080"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-halaudiosrc.html#idp5920880"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-halaudiosrc.html#idp10115680"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-hdv1394src.html#idp14486608"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-hdv1394src.html#idp13003296"/>
<keyword type="struct" name="struct GstHDV1394Src" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src-struct"/>
<keyword type="property" name="The "channel" property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--channel"/>
<keyword type="property" name="The "device-name" property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--device-name"/>
<keyword type="property" name="The "guid" property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--guid"/>
<keyword type="property" name="The "port" property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--port"/>
<keyword type="property" name="The "use-avc" property" link="gst-plugins-good-plugins-hdv1394src.html#GstHDV1394Src--use-avc"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-icydemux.html#idp8752736"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-icydemux.html#idp6852624"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-icydemux.html#idp7234704"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-icydemux.html#idp11712848"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-icydemux.html#idp13509056"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-icydemux.html#idp5485952"/>
<keyword type="struct" name="struct GstICYDemux" link="gst-plugins-good-plugins-icydemux.html#GstICYDemux-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-id3demux.html#idp1554832"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3demux.html#idp8865840"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3demux.html#idp12020096"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-id3demux.html#idp12933904"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3demux.html#idp9773552"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3demux.html#idp9938576"/>
<keyword type="struct" name="struct GstID3Demux" link="gst-plugins-good-plugins-id3demux.html#GstID3Demux-struct"/>
<keyword type="property" name="The "prefer-v1" property" link="gst-plugins-good-plugins-id3demux.html#GstID3Demux--prefer-v1"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3v2mux.html#idp6447088"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3v2mux.html#idp13280416"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-id3v2mux.html#idp12796832"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-id3v2mux.html#idp13305392"/>
<keyword type="struct" name="struct GstId3v2Mux" link="gst-plugins-good-plugins-id3v2mux.html#GstId3v2Mux-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-imagefreeze.html#idp11896576"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-imagefreeze.html#idp10630384"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-imagefreeze.html#idp8437888"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-imagefreeze.html#idp14310704"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-imagefreeze.html#idp10794624"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-imagefreeze.html#idp13457184"/>
<keyword type="struct" name="struct GstImageFreeze" link="gst-plugins-good-plugins-imagefreeze.html#GstImageFreeze-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-interleave.html#idp14622416"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-interleave.html#idp14085984"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-interleave.html#idp6309776"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-interleave.html#idp11052288"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-interleave.html#idp10927472"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-interleave.html#idp11749296"/>
<keyword type="struct" name="struct GstInterleave" link="gst-plugins-good-plugins-interleave.html#GstInterleave-struct"/>
<keyword type="property" name="The "channel-positions" property" link="gst-plugins-good-plugins-interleave.html#GstInterleave--channel-positions"/>
<keyword type="property" name="The "channel-positions-from-input" property" link="gst-plugins-good-plugins-interleave.html#GstInterleave--channel-positions-from-input"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-ismlmux.html#idp12445088"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ismlmux.html#idp8296592"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ismlmux.html#idp5735360"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosrc.html#idp14932784"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosrc.html#idp7660400"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-ismlmux.html#idp11996000"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ismlmux.html#idp13520976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ismlmux.html#idp2111536"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosrc.html#idp11547568"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosrc.html#idp6028736"/>
<keyword type="struct" name="struct GstJackAudioSrc" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc-struct"/>
<keyword type="property" name="The "client" property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--client"/>
<keyword type="property" name="The "connect" property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--connect"/>
<keyword type="property" name="The "server" property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--server"/>
<keyword type="property" name="The "client-name" property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--client-name"/>
<keyword type="property" name="The "transport" property" link="gst-plugins-good-plugins-jackaudiosrc.html#GstJackAudioSrc--transport"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosink.html#idp14199808"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosink.html#idp12583040"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jackaudiosink.html#idp11351712"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jackaudiosink.html#idp3040816"/>
<keyword type="struct" name="struct GstJackAudioSink" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink-struct"/>
<keyword type="property" name="The "client" property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--client"/>
<keyword type="property" name="The "connect" property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--connect"/>
<keyword type="property" name="The "server" property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--server"/>
<keyword type="property" name="The "client-name" property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--client-name"/>
<keyword type="property" name="The "transport" property" link="gst-plugins-good-plugins-jackaudiosink.html#GstJackAudioSink--transport"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegdec.html#idp11913216"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegdec.html#idp5547968"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegdec.html#idp13020896"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegdec.html#idp10621456"/>
<keyword type="struct" name="struct GstJpegDec" link="gst-plugins-good-plugins-jpegdec.html#GstJpegDec-struct"/>
<keyword type="property" name="The "idct-method" property" link="gst-plugins-good-plugins-jpegdec.html#GstJpegDec--idct-method"/>
<keyword type="property" name="The "max-errors" property" link="gst-plugins-good-plugins-jpegdec.html#GstJpegDec--max-errors"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegenc.html#idp5863408"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegenc.html#idp13358688"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-jpegenc.html#idp13585120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-jpegenc.html#idp7128304"/>
<keyword type="struct" name="struct GstJpegEnc" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc-struct"/>
<keyword type="property" name="The "quality" property" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc--quality"/>
<keyword type="property" name="The "idct-method" property" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc--idct-method"/>
<keyword type="signal" name="The "frame-encoded" signal" link="gst-plugins-good-plugins-jpegenc.html#GstJpegEnc-frame-encoded"/>
- <keyword type="" name="Example application" link="gst-plugins-good-plugins-level.html#idp10054000"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-level.html#idp12188624"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-level.html#idp15134432"/>
+ <keyword type="" name="Example application" link="gst-plugins-good-plugins-level.html#idp14067184"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-level.html#idp15231584"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-level.html#idp10897040"/>
<keyword type="struct" name="struct GstLevel" link="gst-plugins-good-plugins-level.html#GstLevel-struct"/>
<keyword type="property" name="The "interval" property" link="gst-plugins-good-plugins-level.html#GstLevel--interval"/>
<keyword type="property" name="The "message" property" link="gst-plugins-good-plugins-level.html#GstLevel--message"/>
<keyword type="property" name="The "peak-falloff" property" link="gst-plugins-good-plugins-level.html#GstLevel--peak-falloff"/>
<keyword type="property" name="The "peak-ttl" property" link="gst-plugins-good-plugins-level.html#GstLevel--peak-ttl"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskamux.html#idp14139872"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskamux.html#idp7143184"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskamux.html#idp14871456"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskamux.html#idp15352928"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskamux.html#idp13528912"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskamux.html#idp15038080"/>
<keyword type="struct" name="GstMatroskaMux" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux-struct"/>
<keyword type="property" name="The "writing-app" property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--writing-app"/>
<keyword type="property" name="The "version" property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--version"/>
<keyword type="property" name="The "min-index-interval" property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--min-index-interval"/>
<keyword type="property" name="The "streamable" property" link="gst-plugins-good-plugins-matroskamux.html#GstMatroskaMux--streamable"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskademux.html#idp12150016"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskademux.html#idp10071664"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskademux.html#idp15544336"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-matroskademux.html#idp7858688"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-matroskademux.html#idp11469104"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-matroskademux.html#idp13845984"/>
<keyword type="struct" name="GstMatroskaDemux" link="gst-plugins-good-plugins-matroskademux.html#GstMatroskaDemux-struct"/>
<keyword type="property" name="The "max-gap-time" property" link="gst-plugins-good-plugins-matroskademux.html#GstMatroskaDemux--max-gap-time"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mj2mux.html#idp14947264"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mj2mux.html#idp14950608"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mj2mux.html#idp13684256"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mj2mux.html#idp16379776"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mj2mux.html#idp16383120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mj2mux.html#idp13655488"/>
<keyword type="struct" name="GstMJ2Mux" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux-struct"/>
<keyword type="property" name="The "dts-method" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--dts-method"/>
<keyword type="property" name="The "faststart" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--faststart"/>
@@ -731,17 +731,17 @@
<keyword type="property" name="The "presentation-time" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--presentation-time"/>
<keyword type="property" name="The "streamable" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--streamable"/>
<keyword type="property" name="The "trak-timescale" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-monoscope.html#idp15098752"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-monoscope.html#idp10557040"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-monoscope.html#idp14622192"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-monoscope.html#idp14634032"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-monoscope.html#idp13144176"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-monoscope.html#idp16556256"/>
<keyword type="struct" name="struct GstMonoscope" link="gst-plugins-good-plugins-monoscope.html#GstMonoscope"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-mpegaudioparse.html#idp15916176"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mpegaudioparse.html#idp12368368"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mpegaudioparse.html#idp5454560"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-mpegaudioparse.html#idp10058000"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mpegaudioparse.html#idp10365648"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mpegaudioparse.html#idp12821264"/>
<keyword type="struct" name="struct GstMpegAudioParse" link="gst-plugins-good-plugins-mpegaudioparse.html#GstMpegAudioParse-struct"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mp4mux.html#idp13718864"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mp4mux.html#idp16971472"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mp4mux.html#idp14772880"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-mp4mux.html#idp11215424"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mp4mux.html#idp16346192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mp4mux.html#idp14421760"/>
<keyword type="typedef" name="GstMP4Mux" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux"/>
<keyword type="property" name="The "dts-method" property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--dts-method"/>
<keyword type="property" name="The "faststart" property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--faststart"/>
@@ -752,16 +752,16 @@
<keyword type="property" name="The "presentation-time" property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--presentation-time"/>
<keyword type="property" name="The "streamable" property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--streamable"/>
<keyword type="property" name="The "trak-timescale" property" link="gst-plugins-good-plugins-mp4mux.html#GstMP4Mux--trak-timescale"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawdec.html#idp7932992"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawdec.html#idp13612640"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawdec.html#idp6390896"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawdec.html#idp6743376"/>
<keyword type="struct" name="struct GstMuLawDec" link="gst-plugins-good-plugins-mulawdec.html#GstMuLawDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawenc.html#idp15582992"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawenc.html#idp15600032"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mulawenc.html#idp12671616"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mulawenc.html#idp11638912"/>
<keyword type="struct" name="struct GstMuLawDec" link="gst-plugins-good-plugins-mulawenc.html#GstMuLawDec-struct"/>
<keyword type="struct" name="struct GstMuLawEnc" link="gst-plugins-good-plugins-mulawenc.html#GstMuLawEnc"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesink.html#idp11279248"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesink.html#idp12899488"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesink.html#idp13672064"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesink.html#idp16984192"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesink.html#idp15017088"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesink.html#idp8195056"/>
<keyword type="struct" name="struct GstMultiFileSink" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink-struct"/>
<keyword type="enum" name="enum GstMultiFileSinkNext" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSinkNext"/>
<keyword type="property" name="The "location" property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--location"/>
@@ -770,9 +770,9 @@
<keyword type="property" name="The "post-messages" property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--post-messages"/>
<keyword type="property" name="The "max-files" property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--max-files"/>
<keyword type="property" name="The "max-file-size" property" link="gst-plugins-good-plugins-multifilesink.html#GstMultiFileSink--max-file-size"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesrc.html#idp13648928"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesrc.html#idp14462128"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesrc.html#idp13053824"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-multifilesrc.html#idp16445136"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multifilesrc.html#idp6057696"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multifilesrc.html#idp15996928"/>
<keyword type="struct" name="struct GstMultiFileSrc" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc-struct"/>
<keyword type="property" name="The "caps" property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--caps"/>
<keyword type="property" name="The "index" property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--index"/>
@@ -780,20 +780,20 @@
<keyword type="property" name="The "loop" property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--loop"/>
<keyword type="property" name="The "start-index" property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--start-index"/>
<keyword type="property" name="The "stop-index" property" link="gst-plugins-good-plugins-multifilesrc.html#GstMultiFileSrc--stop-index"/>
- <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartdemux.html#idp13627088"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartdemux.html#idp15846352"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartdemux.html#idp12900448"/>
+ <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartdemux.html#idp14969952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartdemux.html#idp7024064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartdemux.html#idp16683584"/>
<keyword type="struct" name="struct GstMultipartDemux" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux-struct"/>
<keyword type="property" name="The "autoscan" property" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux--autoscan"/>
<keyword type="property" name="The "boundary" property" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux--boundary"/>
<keyword type="property" name="The "single-stream" property" link="gst-plugins-good-plugins-multipartdemux.html#GstMultipartDemux--single-stream"/>
- <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartmux.html#idp7198176"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartmux.html#idp12671808"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartmux.html#idp14974560"/>
+ <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-multipartmux.html#idp15901952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multipartmux.html#idp3128720"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multipartmux.html#idp14213872"/>
<keyword type="struct" name="struct GstMultipartMux" link="gst-plugins-good-plugins-multipartmux.html#GstMultipartMux-struct"/>
<keyword type="property" name="The "boundary" property" link="gst-plugins-good-plugins-multipartmux.html#GstMultipartMux--boundary"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multiudpsink.html#idp13416368"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multiudpsink.html#idp14614272"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-multiudpsink.html#idp15182992"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-multiudpsink.html#idp14663680"/>
<keyword type="struct" name="struct GstMultiUDPSink" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-struct"/>
<keyword type="property" name="The "bytes-served" property" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink--bytes-served"/>
<keyword type="property" name="The "bytes-to-serve" property" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink--bytes-to-serve"/>
@@ -817,65 +817,65 @@
<keyword type="signal" name="The "client-removed" signal" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-client-removed"/>
<keyword type="signal" name="The "get-stats" signal" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-get-stats"/>
<keyword type="signal" name="The "remove" signal" link="gst-plugins-good-plugins-multiudpsink.html#GstMultiUDPSink-remove"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-optv.html#idp15603072"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-optv.html#idp11528464"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-optv.html#idp15019408"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-optv.html#idp9675584"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-optv.html#idp13501936"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-optv.html#idp7227808"/>
<keyword type="struct" name="struct GstOpTV" link="gst-plugins-good-plugins-optv.html#GstOpTV-struct"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-optv.html#GstOpTV--mode"/>
<keyword type="property" name="The "speed" property" link="gst-plugins-good-plugins-optv.html#GstOpTV--speed"/>
<keyword type="property" name="The "threshold" property" link="gst-plugins-good-plugins-optv.html#GstOpTV--threshold"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4sink.html#idp16061408"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4sink.html#idp13535600"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4sink.html#idp14166736"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4sink.html#idp13591312"/>
<keyword type="struct" name="struct GstOss4Sink" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--device"/>
<keyword type="property" name="The "device-name" property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--device-name"/>
<keyword type="property" name="The "mute" property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--mute"/>
<keyword type="property" name="The "volume" property" link="gst-plugins-good-plugins-oss4sink.html#GstOss4Sink--volume"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4src.html#idp13893984"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4src.html#idp13665600"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-oss4src.html#idp16960352"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-oss4src.html#idp15252448"/>
<keyword type="struct" name="struct GstOss4Source" link="gst-plugins-good-plugins-oss4src.html#GstOss4Source-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-oss4src.html#GstOss4Source--device"/>
<keyword type="property" name="The "device-name" property" link="gst-plugins-good-plugins-oss4src.html#GstOss4Source--device-name"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssink.html#idp17396592"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssink.html#idp12343984"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssink.html#idp13042544"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssink.html#idp15048208"/>
<keyword type="struct" name="struct GstOssSink" link="gst-plugins-good-plugins-osssink.html#GstOssSink-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-osssink.html#GstOssSink--device"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssrc.html#idp14875536"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssrc.html#idp12837568"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osssrc.html#idp14918800"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osssrc.html#idp16633296"/>
<keyword type="struct" name="struct GstOssSrc" link="gst-plugins-good-plugins-osssrc.html#GstOssSrc-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-osssrc.html#GstOssSrc--device"/>
<keyword type="property" name="The "device-name" property" link="gst-plugins-good-plugins-osssrc.html#GstOssSrc--device-name"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosink.html#idp15465232"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosink.html#idp11952400"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosink.html#idp14466992"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosink.html#idp14449936"/>
<keyword type="struct" name="struct GstOsxAudioSink" link="gst-plugins-good-plugins-osxaudiosink.html#GstOsxAudioSink"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-osxaudiosink.html#GstOsxAudioSink--device"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosrc.html#idp14176992"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosrc.html#idp13268544"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxaudiosrc.html#idp13749760"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxaudiosrc.html#idp12698672"/>
<keyword type="struct" name="struct GstOsxAudioSrc" link="gst-plugins-good-plugins-osxaudiosrc.html#GstOsxAudioSrc"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-osxaudiosrc.html#GstOsxAudioSrc--device"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxvideosink.html#idp16997200"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxvideosink.html#idp14990512"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-osxvideosink.html#idp14476656"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-osxvideosink.html#idp11391024"/>
<keyword type="struct" name="struct GstOSXVideoSink" link="gst-plugins-good-plugins-osxvideosink.html#GstOSXVideoSink"/>
<keyword type="property" name="The "embed" property" link="gst-plugins-good-plugins-osxvideosink.html#GstOSXVideoSink--embed"/>
<keyword type="property" name="The "fullscreen" property" link="gst-plugins-good-plugins-osxvideosink.html#GstOSXVideoSink--fullscreen"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngdec.html#idp17045680"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngdec.html#idp12461632"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngdec.html#idp13348768"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngdec.html#idp17448528"/>
<keyword type="struct" name="struct GstPngDec" link="gst-plugins-good-plugins-pngdec.html#GstPngDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngenc.html#idp8801328"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngenc.html#idp17387600"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pngenc.html#idp16802192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pngenc.html#idp17219808"/>
<keyword type="struct" name="struct GstPngEnc" link="gst-plugins-good-plugins-pngenc.html#GstPngEnc-struct"/>
<keyword type="property" name="The "compression-level" property" link="gst-plugins-good-plugins-pngenc.html#GstPngEnc--compression-level"/>
<keyword type="property" name="The "snapshot" property" link="gst-plugins-good-plugins-pngenc.html#GstPngEnc--snapshot"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-progressreport.html#idp16573728"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-progressreport.html#idp14888352"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-progressreport.html#idp17620800"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-progressreport.html#idp16876784"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-progressreport.html#idp17475792"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-progressreport.html#idp18411504"/>
<keyword type="struct" name="struct GstProgressReport" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport-struct"/>
<keyword type="property" name="The "silent" property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--silent"/>
<keyword type="property" name="The "update-freq" property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--update-freq"/>
<keyword type="property" name="The "format" property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--format"/>
<keyword type="property" name="The "do-query" property" link="gst-plugins-good-plugins-progressreport.html#GstProgressReport--do-query"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesink.html#idp14226496"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesink.html#idp18533488"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesink.html#idp18505952"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesink.html#idp18169792"/>
<keyword type="struct" name="struct GstPulseSink" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--device"/>
<keyword type="property" name="The "server" property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--server"/>
@@ -885,8 +885,8 @@
<keyword type="property" name="The "client" property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--client"/>
<keyword type="property" name="The "stream-properties" property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--stream-properties"/>
<keyword type="property" name="The "client-name" property" link="gst-plugins-good-plugins-pulsesink.html#GstPulseSink--client-name"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesrc.html#idp15830176"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesrc.html#idp16137760"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-pulsesrc.html#idp18467712"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-pulsesrc.html#idp16571856"/>
<keyword type="struct" name="struct GstPulseSrc" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--device"/>
<keyword type="property" name="The "server" property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--server"/>
@@ -897,19 +897,19 @@
<keyword type="property" name="The "source-output-index" property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--source-output-index"/>
<keyword type="property" name="The "volume" property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--volume"/>
<keyword type="property" name="The "client-name" property" link="gst-plugins-good-plugins-pulsesrc.html#GstPulseSrc--client-name"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-quarktv.html#idp16982704"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-quarktv.html#idp12094928"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-quarktv.html#idp7666208"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-quarktv.html#idp16931968"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-quarktv.html#idp16592720"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-quarktv.html#idp18151408"/>
<keyword type="struct" name="struct GstQuarkTV" link="gst-plugins-good-plugins-quarktv.html#GstQuarkTV-struct"/>
<keyword type="property" name="The "planes" property" link="gst-plugins-good-plugins-quarktv.html#GstQuarkTV--planes"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-qtdemux.html#idp18579184"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtdemux.html#idp18396848"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtdemux.html#idp14995312"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-qtdemux.html#idp16508992"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtdemux.html#idp11555520"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtdemux.html#idp18441568"/>
<keyword type="struct" name="struct GstQTDemux" link="gst-plugins-good-plugins-qtdemux.html#GstQTDemux-struct"/>
<keyword type="signal" name="The "got-redirect" signal" link="gst-plugins-good-plugins-qtdemux.html#GstQTDemux-got-redirect"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmux.html#idp14533840"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmux.html#idp18089440"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmux.html#idp18220912"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmux.html#idp15040608"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmux.html#idp17984064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmux.html#idp16286576"/>
<keyword type="struct" name="struct GstQTMux" link="gst-plugins-good-plugins-qtmux.html#GstQTMux-struct"/>
<keyword type="property" name="The "dts-method" property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--dts-method"/>
<keyword type="property" name="The "faststart" property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--faststart"/>
@@ -920,9 +920,9 @@
<keyword type="property" name="The "presentation-time" property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--presentation-time"/>
<keyword type="property" name="The "streamable" property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--streamable"/>
<keyword type="property" name="The "trak-timescale" property" link="gst-plugins-good-plugins-qtmux.html#GstQTMux--trak-timescale"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmoovrecover.html#idp16289536"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmoovrecover.html#idp17935520"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmoovrecover.html#idp13683776"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-qtmoovrecover.html#idp19021920"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-qtmoovrecover.html#idp14994016"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-qtmoovrecover.html#idp18410608"/>
<keyword type="struct" name="struct GstQTMoovRecover" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover-struct"/>
<keyword type="struct" name="struct GstQTMoovRecoverClass" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecoverClass"/>
<keyword type="function" name="gst_qt_moov_recover_get_type ()" link="gst-plugins-good-plugins-qtmoovrecover.html#gst-qt-moov-recover-get-type"/>
@@ -931,37 +931,37 @@
<keyword type="property" name="The "faststart-mode" property" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover--faststart-mode"/>
<keyword type="property" name="The "fixed-output" property" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover--fixed-output"/>
<keyword type="property" name="The "recovery-input" property" link="gst-plugins-good-plugins-qtmoovrecover.html#GstQTMoovRecover--recovery-input"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-radioactv.html#idp17938752"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-radioactv.html#idp17974720"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-radioactv.html#idp18371584"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-radioactv.html#idp15095104"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-radioactv.html#idp18423808"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-radioactv.html#idp18965008"/>
<keyword type="struct" name="struct GstRadioacTV" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV-struct"/>
<keyword type="property" name="The "color" property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--color"/>
<keyword type="property" name="The "interval" property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--interval"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--mode"/>
<keyword type="property" name="The "trigger" property" link="gst-plugins-good-plugins-radioactv.html#GstRadioacTV--trigger"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-revtv.html#idp15114448"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-revtv.html#idp18604560"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-revtv.html#idp18985248"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-revtv.html#idp18508432"/>
<keyword type="struct" name="struct GstRevTV" link="gst-plugins-good-plugins-revtv.html#GstRevTV-struct"/>
<keyword type="property" name="The "delay" property" link="gst-plugins-good-plugins-revtv.html#GstRevTV--delay"/>
<keyword type="property" name="The "gain" property" link="gst-plugins-good-plugins-revtv.html#GstRevTV--gain"/>
<keyword type="property" name="The "linespace" property" link="gst-plugins-good-plugins-revtv.html#GstRevTV--linespace"/>
- <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-rganalysis.html#idp18377488"/>
- <keyword type="" name="Acknowledgements" link="gst-plugins-good-plugins-rganalysis.html#idp16057808"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rganalysis.html#idp16076176"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rganalysis.html#idp16534736"/>
+ <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-rganalysis.html#idp17336704"/>
+ <keyword type="" name="Acknowledgements" link="gst-plugins-good-plugins-rganalysis.html#idp17701760"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rganalysis.html#idp16660448"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rganalysis.html#idp15233984"/>
<keyword type="struct" name="struct GstRgAnalysis" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis-struct"/>
<keyword type="property" name="The "forced" property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--forced"/>
<keyword type="property" name="The "num-tracks" property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--num-tracks"/>
<keyword type="property" name="The "reference-level" property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--reference-level"/>
<keyword type="property" name="The "message" property" link="gst-plugins-good-plugins-rganalysis.html#GstRgAnalysis--message"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rglimiter.html#idp17417984"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rglimiter.html#idp16095728"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rglimiter.html#idp12715696"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rglimiter.html#idp16576208"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rglimiter.html#idp13916960"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rglimiter.html#idp18335424"/>
<keyword type="struct" name="struct GstRgLimiter" link="gst-plugins-good-plugins-rglimiter.html#GstRgLimiter-struct"/>
<keyword type="property" name="The "enabled" property" link="gst-plugins-good-plugins-rglimiter.html#GstRgLimiter--enabled"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rgvolume.html#idp11662896"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rgvolume.html#idp15798384"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rgvolume.html#idp17320768"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rgvolume.html#idp19014832"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rgvolume.html#idp18625824"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rgvolume.html#idp19948352"/>
<keyword type="struct" name="struct GstRgVolume" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume-struct"/>
<keyword type="property" name="The "album-mode" property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--album-mode"/>
<keyword type="property" name="The "fallback-gain" property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--fallback-gain"/>
@@ -969,14 +969,14 @@
<keyword type="property" name="The "pre-amp" property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--pre-amp"/>
<keyword type="property" name="The "result-gain" property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--result-gain"/>
<keyword type="property" name="The "target-gain" property" link="gst-plugins-good-plugins-rgvolume.html#GstRgVolume--target-gain"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rippletv.html#idp14494592"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rippletv.html#idp18386560"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rippletv.html#idp12922656"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rippletv.html#idp18655552"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rippletv.html#idp12788160"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rippletv.html#idp17201552"/>
<keyword type="struct" name="struct GstRippleTV" link="gst-plugins-good-plugins-rippletv.html#GstRippleTV-struct"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-rippletv.html#GstRippleTV--mode"/>
<keyword type="property" name="The "reset" property" link="gst-plugins-good-plugins-rippletv.html#GstRippleTV--reset"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpdec.html#idp18422528"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpdec.html#idp15775200"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpdec.html#idp17158784"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpdec.html#idp19145984"/>
<keyword type="struct" name="struct GstRTPDec" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-struct"/>
<keyword type="property" name="The "skip" property" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec--skip"/>
<keyword type="property" name="The "latency" property" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec--latency"/>
@@ -988,19 +988,19 @@
<keyword type="signal" name="The "on-ssrc-collision" signal" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-ssrc-collision"/>
<keyword type="signal" name="The "on-ssrc-validated" signal" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-ssrc-validated"/>
<keyword type="signal" name="The "on-timeout" signal" link="gst-plugins-good-plugins-rtpdec.html#GstRTPDec-on-timeout"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpj2kpay.html#idp15023856"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpj2kpay.html#idp15432080"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpj2kpay.html#idp19010752"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpj2kpay.html#idp17027424"/>
<keyword type="struct" name="struct GstRtpJ2KPay" link="gst-plugins-good-plugins-rtpj2kpay.html#GstRtpJ2KPay-struct"/>
<keyword type="property" name="The "buffer-list" property" link="gst-plugins-good-plugins-rtpj2kpay.html#GstRtpJ2KPay--buffer-list"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjpegpay.html#idp19262176"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjpegpay.html#idp16372944"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjpegpay.html#idp15939184"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjpegpay.html#idp18477600"/>
<keyword type="struct" name="struct GstRtpJPEGPay" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay-struct"/>
<keyword type="property" name="The "quality" property" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay--quality"/>
<keyword type="property" name="The "type" property" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay--type"/>
<keyword type="property" name="The "buffer-list" property" link="gst-plugins-good-plugins-rtpjpegpay.html#GstRtpJPEGPay--buffer-list"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rtspsrc.html#idp16812576"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtspsrc.html#idp16968336"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtspsrc.html#idp14126928"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-rtspsrc.html#idp19933040"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtspsrc.html#idp19780176"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtspsrc.html#idp16008368"/>
<keyword type="struct" name="struct GstRTSPSrc" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-struct"/>
<keyword type="property" name="The "debug" property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--debug"/>
<keyword type="property" name="The "location" property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--location"/>
@@ -1021,8 +1021,8 @@
<keyword type="property" name="The "udp-buffer-size" property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--udp-buffer-size"/>
<keyword type="property" name="The "short-header" property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--short-header"/>
<keyword type="property" name="The "do-rtsp-keep-alive" property" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc--do-rtsp-keep-alive"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpbin.html#idp19963648"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpbin.html#idp19971104"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpbin.html#idp20413840"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpbin.html#idp20707808"/>
<keyword type="struct" name="struct GstRtpBin" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-struct"/>
<keyword type="property" name="The "do-lost" property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--do-lost"/>
<keyword type="property" name="The "latency" property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--latency"/>
@@ -1049,8 +1049,8 @@
<keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-request-pt-map"/>
<keyword type="signal" name="The "reset-sync" signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-reset-sync"/>
<keyword type="signal" name="The "payload-type-change" signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-payload-type-change"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp15909456"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp17936192"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp14811488"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjitterbuffer.html#idp17208800"/>
<keyword type="struct" name="struct GstRtpJitterBuffer" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-struct"/>
<keyword type="property" name="The "do-lost" property" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--do-lost"/>
<keyword type="property" name="The "drop-on-latency" property" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--drop-on-latency"/>
@@ -1063,15 +1063,15 @@
<keyword type="signal" name="The "on-npt-stop" signal" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-on-npt-stop"/>
<keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-request-pt-map"/>
<keyword type="signal" name="The "set-active" signal" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-set-active"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpptdemux.html#idp18333344"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpptdemux.html#idp18026816"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpptdemux.html#idp17960880"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpptdemux.html#idp19988096"/>
<keyword type="struct" name="struct GstRtpPtDemux" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-struct"/>
<keyword type="signal" name="The "clear-pt-map" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-clear-pt-map"/>
<keyword type="signal" name="The "new-payload-type" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-new-payload-type"/>
<keyword type="signal" name="The "payload-type-change" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-payload-type-change"/>
<keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-request-pt-map"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpsession.html#idp20768944"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpsession.html#idp9068560"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpsession.html#idp18754992"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpsession.html#idp15781728"/>
<keyword type="struct" name="struct GstRtpSession" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-struct"/>
<keyword type="property" name="The "bandwidth" property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--bandwidth"/>
<keyword type="property" name="The "internal-session" property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--internal-session"/>
@@ -1095,19 +1095,19 @@
<keyword type="signal" name="The "on-ssrc-validated" signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-validated"/>
<keyword type="signal" name="The "on-timeout" signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-timeout"/>
<keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-request-pt-map"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp18338576"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp17846320"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp16913344"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpssrcdemux.html#idp9722384"/>
<keyword type="struct" name="struct GstRtpSsrcDemux" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-struct"/>
<keyword type="signal" name="The "clear-ssrc" signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-clear-ssrc"/>
<keyword type="signal" name="The "new-ssrc-pad" signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad"/>
<keyword type="signal" name="The "removed-ssrc-pad" signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-removed-ssrc-pad"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shagadelictv.html#idp11613744"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shagadelictv.html#idp19951856"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shagadelictv.html#idp19820576"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shagadelictv.html#idp19823328"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shagadelictv.html#idp10051232"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shagadelictv.html#idp17856288"/>
<keyword type="struct" name="struct GstShagadelicTV" link="gst-plugins-good-plugins-shagadelictv.html#GstShagadelicTV-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shapewipe.html#idp19928560"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shapewipe.html#idp13802976"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shapewipe.html#idp17159696"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-shapewipe.html#idp17990864"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-shapewipe.html#idp19575648"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-shapewipe.html#idp18799072"/>
<keyword type="struct" name="struct GstShapeWipe" link="gst-plugins-good-plugins-shapewipe.html#GstShapeWipe-struct"/>
<keyword type="property" name="The "border" property" link="gst-plugins-good-plugins-shapewipe.html#GstShapeWipe--border"/>
<keyword type="property" name="The "position" property" link="gst-plugins-good-plugins-shapewipe.html#GstShapeWipe--position"/>
@@ -1117,9 +1117,9 @@
<keyword type="property" name="The "qmax" property" link="gst-plugins-good-plugins-smokeenc.html#GstSmokeEnc--qmax"/>
<keyword type="property" name="The "qmin" property" link="gst-plugins-good-plugins-smokeenc.html#GstSmokeEnc--qmin"/>
<keyword type="property" name="The "threshold" property" link="gst-plugins-good-plugins-smokeenc.html#GstSmokeEnc--threshold"/>
- <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smpte.html#idp16930224"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smpte.html#idp15005712"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smpte.html#idp15773936"/>
+ <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smpte.html#idp10946432"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smpte.html#idp20619216"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smpte.html#idp18176672"/>
<keyword type="struct" name="struct GstSMPTE" link="gst-plugins-good-plugins-smpte.html#GstSMPTE-struct"/>
<keyword type="property" name="The "border" property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--border"/>
<keyword type="property" name="The "depth" property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--depth"/>
@@ -1127,17 +1127,17 @@
<keyword type="property" name="The "type" property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--type"/>
<keyword type="property" name="The "duration" property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--duration"/>
<keyword type="property" name="The "invert" property" link="gst-plugins-good-plugins-smpte.html#GstSMPTE--invert"/>
- <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smptealpha.html#idp17815568"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smptealpha.html#idp17461872"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smptealpha.html#idp20163440"/>
+ <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-smptealpha.html#idp17131920"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-smptealpha.html#idp16816768"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-smptealpha.html#idp20958128"/>
<keyword type="struct" name="struct GstSMPTEAlpha" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha-struct"/>
<keyword type="property" name="The "border" property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--border"/>
<keyword type="property" name="The "depth" property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--depth"/>
<keyword type="property" name="The "position" property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--position"/>
<keyword type="property" name="The "type" property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--type"/>
<keyword type="property" name="The "invert" property" link="gst-plugins-good-plugins-smptealpha.html#GstSMPTEAlpha--invert"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-souphttpsrc.html#idp18458304"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-souphttpsrc.html#idp16526672"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-souphttpsrc.html#idp19864112"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-souphttpsrc.html#idp15376432"/>
<keyword type="struct" name="struct GstSoupHTTPSrc" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc-struct"/>
<keyword type="property" name="The "automatic-redirect" property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--automatic-redirect"/>
<keyword type="property" name="The "cookies" property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--cookies"/>
@@ -1156,9 +1156,9 @@
<keyword type="property" name="The "user-pw" property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--user-pw"/>
<keyword type="property" name="The "extra-headers" property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--extra-headers"/>
<keyword type="property" name="The "timeout" property" link="gst-plugins-good-plugins-souphttpsrc.html#GstSoupHTTPSrc--timeout"/>
- <keyword type="" name="Example application" link="gst-plugins-good-plugins-spectrum.html#idp18637312"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-spectrum.html#idp21504352"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-spectrum.html#idp19198720"/>
+ <keyword type="" name="Example application" link="gst-plugins-good-plugins-spectrum.html#idp22892608"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-spectrum.html#idp19860928"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-spectrum.html#idp22422640"/>
<keyword type="struct" name="struct GstSpectrum" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum-struct"/>
<keyword type="property" name="The "bands" property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--bands"/>
<keyword type="property" name="The "interval" property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--interval"/>
@@ -1168,8 +1168,8 @@
<keyword type="property" name="The "message-phase" property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--message-phase"/>
<keyword type="property" name="The "post-messages" property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--post-messages"/>
<keyword type="property" name="The "multi-channel" property" link="gst-plugins-good-plugins-spectrum.html#GstSpectrum--multi-channel"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexenc.html#idp18777776"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexenc.html#idp20790096"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexenc.html#idp18580720"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexenc.html#idp22106928"/>
<keyword type="struct" name="struct GstSpeexEnc" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc-struct"/>
<keyword type="property" name="The "abr" property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--abr"/>
<keyword type="property" name="The "bitrate" property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--bitrate"/>
@@ -1181,28 +1181,28 @@
<keyword type="property" name="The "vad" property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--vad"/>
<keyword type="property" name="The "vbr" property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--vbr"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-speexenc.html#GstSpeexEnc--mode"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexdec.html#idp19233488"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexdec.html#idp17066736"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-speexdec.html#idp22237456"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-speexdec.html#idp19549824"/>
<keyword type="struct" name="struct GstSpeexDec" link="gst-plugins-good-plugins-speexdec.html#GstSpeexDec-struct"/>
<keyword type="property" name="The "enh" property" link="gst-plugins-good-plugins-speexdec.html#GstSpeexDec--enh"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-splitfilesrc.html#idp22243216"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-splitfilesrc.html#idp16819744"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-splitfilesrc.html#idp22268880"/>
+ <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-splitfilesrc.html#idp16789024"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-splitfilesrc.html#idp20089056"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-splitfilesrc.html#idp19955104"/>
<keyword type="struct" name="struct GstSplitFileSrc" link="gst-plugins-good-plugins-splitfilesrc.html#GstSplitFileSrc-struct"/>
<keyword type="property" name="The "location" property" link="gst-plugins-good-plugins-splitfilesrc.html#GstSplitFileSrc--location"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-streaktv.html#idp18778064"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-streaktv.html#idp17921024"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-streaktv.html#idp18701600"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-streaktv.html#idp22225152"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-streaktv.html#idp16626048"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-streaktv.html#idp18885472"/>
<keyword type="struct" name="struct GstStreakTV" link="gst-plugins-good-plugins-streaktv.html#GstStreakTV-struct"/>
<keyword type="property" name="The "feedback" property" link="gst-plugins-good-plugins-streaktv.html#GstStreakTV--feedback"/>
- <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-taginject.html#idp22819360"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-taginject.html#idp18904192"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-taginject.html#idp17806352"/>
+ <keyword type="" name="Example launch lines" link="gst-plugins-good-plugins-taginject.html#idp18581328"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-taginject.html#idp11157696"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-taginject.html#idp20668656"/>
<keyword type="struct" name="struct GstTagInject" link="gst-plugins-good-plugins-taginject.html#GstTagInject-struct"/>
<keyword type="property" name="The "tags" property" link="gst-plugins-good-plugins-taginject.html#GstTagInject--tags"/>
- <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsrc.html#idp21272048"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsrc.html#idp19556576"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsrc.html#idp21319664"/>
+ <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsrc.html#idp22467472"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsrc.html#idp22547968"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsrc.html#idp22500000"/>
<keyword type="struct" name="struct GstUDPSrc" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc-struct"/>
<keyword type="property" name="The "caps" property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--caps"/>
<keyword type="property" name="The "multicast-group" property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--multicast-group"/>
@@ -1220,14 +1220,14 @@
<keyword type="property" name="The "close-socket" property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--close-socket"/>
<keyword type="property" name="The "socket" property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--socket"/>
<keyword type="property" name="The "used-socket" property" link="gst-plugins-good-plugins-udpsrc.html#GstUDPSrc--used-socket"/>
- <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsink.html#idp15516560"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsink.html#idp16561840"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsink.html#idp18907088"/>
+ <keyword type="" name="Examples" link="gst-plugins-good-plugins-udpsink.html#idp3071616"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-udpsink.html#idp22393792"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-udpsink.html#idp18345792"/>
<keyword type="struct" name="struct GstUDPSink" link="gst-plugins-good-plugins-udpsink.html#GstUDPSink-struct"/>
<keyword type="property" name="The "host" property" link="gst-plugins-good-plugins-udpsink.html#GstUDPSink--host"/>
<keyword type="property" name="The "port" property" link="gst-plugins-good-plugins-udpsink.html#GstUDPSink--port"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2src.html#idp19246304"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2src.html#idp14972000"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2src.html#idp18072752"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2src.html#idp21393312"/>
<keyword type="struct" name="struct GstV4l2Src" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--device"/>
<keyword type="property" name="The "device-name" property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--device-name"/>
@@ -1243,8 +1243,8 @@
<keyword type="property" name="The "norm" property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--norm"/>
<keyword type="property" name="The "io-mode" property" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src--io-mode"/>
<keyword type="signal" name="The "prepare-format" signal" link="gst-plugins-good-plugins-v4l2src.html#GstV4l2Src-prepare-format"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2sink.html#idp21397760"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2sink.html#idp16891888"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2sink.html#idp16913024"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2sink.html#idp21633392"/>
<keyword type="struct" name="struct GstV4l2Sink" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--device"/>
<keyword type="property" name="The "device-fd" property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--device-fd"/>
@@ -1266,28 +1266,28 @@
<keyword type="property" name="The "min-queued-bufs" property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--min-queued-bufs"/>
<keyword type="property" name="The "io-mode" property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--io-mode"/>
<keyword type="property" name="The "norm" property" link="gst-plugins-good-plugins-v4l2sink.html#GstV4l2Sink--norm"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2radio.html#idp21518464"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2radio.html#idp20192112"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-v4l2radio.html#idp19448208"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-v4l2radio.html#idp21862112"/>
<keyword type="struct" name="struct GstV4l2Radio" link="gst-plugins-good-plugins-v4l2radio.html#GstV4l2Radio-struct"/>
<keyword type="property" name="The "device" property" link="gst-plugins-good-plugins-v4l2radio.html#GstV4l2Radio--device"/>
<keyword type="property" name="The "frequency" property" link="gst-plugins-good-plugins-v4l2radio.html#GstV4l2Radio--frequency"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-vertigotv.html#idp18881200"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-vertigotv.html#idp17294656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-vertigotv.html#idp21864656"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-vertigotv.html#idp23553024"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-vertigotv.html#idp19179520"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-vertigotv.html#idp21506112"/>
<keyword type="struct" name="struct GstVertigoTV" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV-struct"/>
<keyword type="property" name="The "speed" property" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV--speed"/>
<keyword type="property" name="The "zoom-speed" property" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV--zoom-speed"/>
<keyword type="signal" name="The "reset-parms" signal" link="gst-plugins-good-plugins-vertigotv.html#GstVertigoTV-reset-parms"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videobalance.html#idp19492112"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobalance.html#idp21329760"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobalance.html#idp17245296"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videobalance.html#idp22055584"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobalance.html#idp18622896"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobalance.html#idp21859952"/>
<keyword type="struct" name="struct GstVideoBalance" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance-struct"/>
<keyword type="property" name="The "brightness" property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--brightness"/>
<keyword type="property" name="The "contrast" property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--contrast"/>
<keyword type="property" name="The "hue" property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--hue"/>
<keyword type="property" name="The "saturation" property" link="gst-plugins-good-plugins-videobalance.html#GstVideoBalance--saturation"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobox.html#idp23145904"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobox.html#idp22489632"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videobox.html#idp20363008"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videobox.html#idp24371136"/>
<keyword type="struct" name="struct GstVideoBox" link="gst-plugins-good-plugins-videobox.html#GstVideoBox-struct"/>
<keyword type="property" name="The "alpha" property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--alpha"/>
<keyword type="property" name="The "border-alpha" property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--border-alpha"/>
@@ -1297,41 +1297,41 @@
<keyword type="property" name="The "right" property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--right"/>
<keyword type="property" name="The "top" property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--top"/>
<keyword type="property" name="The "autocrop" property" link="gst-plugins-good-plugins-videobox.html#GstVideoBox--autocrop"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videocrop.html#idp22560576"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videocrop.html#idp19679072"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videocrop.html#idp21264960"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videocrop.html#idp16561088"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videocrop.html#idp24392016"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videocrop.html#idp19751408"/>
<keyword type="struct" name="struct GstVideoCrop" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop-struct"/>
<keyword type="property" name="The "bottom" property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--bottom"/>
<keyword type="property" name="The "left" property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--left"/>
<keyword type="property" name="The "right" property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--right"/>
<keyword type="property" name="The "top" property" link="gst-plugins-good-plugins-videocrop.html#GstVideoCrop--top"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videoflip.html#idp19600080"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videoflip.html#idp5522368"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videoflip.html#idp16687744"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-videoflip.html#idp22740720"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videoflip.html#idp23680176"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videoflip.html#idp24428704"/>
<keyword type="struct" name="struct GstVideoFlip" link="gst-plugins-good-plugins-videoflip.html#GstVideoFlip-struct"/>
<keyword type="enum" name="enum GstVideoFlipMethod" link="gst-plugins-good-plugins-videoflip.html#GstVideoFlipMethod"/>
<keyword type="property" name="The "method" property" link="gst-plugins-good-plugins-videoflip.html#GstVideoFlip--method"/>
- <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-videomixer.html#idp23886704"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videomixer.html#idp23762656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videomixer.html#idp16908720"/>
+ <keyword type="" name="Sample pipelines" link="gst-plugins-good-plugins-videomixer.html#idp21583136"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-videomixer.html#idp15210672"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-videomixer.html#idp17254032"/>
<keyword type="struct" name="struct GstVideoMixer2" link="gst-plugins-good-plugins-videomixer2.html#GstVideoMixer2-struct"/>
<keyword type="enum" name="enum GstVideoMixer2Background" link="gst-plugins-good-plugins-videomixer2.html#GstVideoMixer2Background"/>
<keyword type="property" name="The "background" property" link="gst-plugins-good-plugins-videomixer2.html#GstVideoMixer2--background"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-warptv.html#idp20134176"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-warptv.html#idp20859648"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-warptv.html#idp22745664"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-warptv.html#idp21833952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-warptv.html#idp17943440"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-warptv.html#idp22009536"/>
<keyword type="struct" name="struct GstWarpTV" link="gst-plugins-good-plugins-warptv.html#GstWarpTV-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavenc.html#idp22184928"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavenc.html#idp19908336"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavenc.html#idp23292704"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavenc.html#idp23280992"/>
<keyword type="struct" name="struct GstWavEnc" link="gst-plugins-good-plugins-wavenc.html#GstWavEnc-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-waveformsink.html#idp21828608"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-waveformsink.html#idp23069872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-waveformsink.html#idp24407968"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-waveformsink.html#idp18153312"/>
<keyword type="struct" name="struct GstWaveFormSink" link="gst-plugins-good-plugins-waveformsink.html#GstWaveFormSink"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackdec.html#idp13004288"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackdec.html#idp22012256"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackdec.html#idp22579248"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackdec.html#idp20026976"/>
<keyword type="struct" name="struct GstWavpackDec" link="gst-plugins-good-plugins-wavpackdec.html#GstWavpackDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackenc.html#idp2320880"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackenc.html#idp21195552"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackenc.html#idp21401344"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackenc.html#idp22125760"/>
<keyword type="struct" name="struct GstWavpackEnc" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc-struct"/>
<keyword type="property" name="The "bitrate" property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--bitrate"/>
<keyword type="property" name="The "bits-per-sample" property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--bits-per-sample"/>
@@ -1340,21 +1340,21 @@
<keyword type="property" name="The "joint-stereo-mode" property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--joint-stereo-mode"/>
<keyword type="property" name="The "md5" property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--md5"/>
<keyword type="property" name="The "mode" property" link="gst-plugins-good-plugins-wavpackenc.html#GstWavpackEnc--mode"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavpackparse.html#idp23728944"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackparse.html#idp8829824"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackparse.html#idp17510176"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavpackparse.html#idp24376096"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavpackparse.html#idp20254752"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavpackparse.html#idp13848544"/>
<keyword type="struct" name="struct GstWavpackParse" link="gst-plugins-good-plugins-wavpackparse.html#GstWavpackParse-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavparse.html#idp22784432"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavparse.html#idp23820656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavparse.html#idp23731424"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-wavparse.html#idp21427840"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-wavparse.html#idp23384256"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-wavparse.html#idp24161712"/>
<keyword type="struct" name="struct GstWavParse" link="gst-plugins-good-plugins-wavparse.html#GstWavParse-struct"/>
<keyword type="property" name="The "ignore-length" property" link="gst-plugins-good-plugins-wavparse.html#GstWavParse--ignore-length"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-webmmux.html#idp21854480"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-webmmux.html#idp21557888"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-webmmux.html#idp21767952"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-webmmux.html#idp22537760"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-webmmux.html#idp21435968"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-webmmux.html#idp22051392"/>
<keyword type="struct" name="struct GstWebMMux" link="gst-plugins-good-plugins-webmmux.html#GstWebMMux-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ximagesrc.html#idp23579168"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ximagesrc.html#idp23595360"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-ximagesrc.html#idp22141536"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-ximagesrc.html#idp24512224"/>
<keyword type="struct" name="struct GstXImageSrc" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc-struct"/>
<keyword type="property" name="The "display-name" property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--display-name"/>
<keyword type="property" name="The "screen-num" property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--screen-num"/>
@@ -1367,9 +1367,9 @@
<keyword type="property" name="The "remote" property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--remote"/>
<keyword type="property" name="The "xid" property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--xid"/>
<keyword type="property" name="The "xname" property" link="gst-plugins-good-plugins-ximagesrc.html#GstXImageSrc--xname"/>
- <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-y4menc.html#idp23695536"/>
- <keyword type="" name="Element Information" link="gst-plugins-good-plugins-y4menc.html#idp19658528"/>
- <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-y4menc.html#idp14827680"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-y4menc.html#idp23366304"/>
+ <keyword type="" name="Element Information" link="gst-plugins-good-plugins-y4menc.html#idp22138016"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-y4menc.html#idp23763952"/>
<keyword type="struct" name="struct GstY4mEncode" link="gst-plugins-good-plugins-y4menc.html#GstY4mEncode-struct"/>
<keyword type="struct" name="struct GstIirEqualizer" link="GstIirEqualizer.html#GstIirEqualizer-struct"/>
<keyword type="struct" name="struct GstVideoMixer2Pad" link="GstVideoMixer2Pad.html#GstVideoMixer2Pad-struct"/>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 049d5e9..ae9e430 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Good Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Good Plugins 1.0 (0.11.92)
+ for GStreamer Good Plugins 1.0 (0.11.93)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/</a>.
</p></div>
diff --git a/docs/plugins/inspect/plugin-annodex.xml b/docs/plugins/inspect/plugin-annodex.xml
deleted file mode 100644
index 5d84482..0000000
--- a/docs/plugins/inspect/plugin-annodex.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<plugin>
- <name>annodex</name>
- <description>annodex stream manipulation (info about annodex: http://www.annodex.net)</description>
- <filename>../../ext/annodex/.libs/libgstannodex.so</filename>
- <basename>libgstannodex.so</basename>
- <version>0.11.91.1</version>
- <license>LGPL</license>
- <source>gst-plugins-good</source>
- <package>GStreamer Good Plug-ins git</package>
- <origin>Unknown package origin</origin>
- <elements>
- <element>
- <name>cmmldec</name>
- <longname>CMML stream decoder</longname>
- <class>Codec/Decoder</class>
- <description>Decodes CMML streams</description>
- <author>Alessandro Decina <alessandro@nnva.org></author>
- <pads>
- <caps>
- <name>sink</name>
- <direction>sink</direction>
- <presence>always</presence>
- <details>text/x-cmml, encoded=(boolean)true</details>
- </caps>
- <caps>
- <name>src</name>
- <direction>source</direction>
- <presence>always</presence>
- <details>text/x-cmml, encoded=(boolean)false</details>
- </caps>
- </pads>
- </element>
- <element>
- <name>cmmlenc</name>
- <longname>CMML streams encoder</longname>
- <class>Codec/Encoder</class>
- <description>Encodes CMML streams</description>
- <author>Alessandro Decina <alessandro@nnva.org></author>
- <pads>
- <caps>
- <name>sink</name>
- <direction>sink</direction>
- <presence>always</presence>
- <details>text/x-cmml, encoded=(boolean)false</details>
- </caps>
- <caps>
- <name>src</name>
- <direction>source</direction>
- <presence>always</presence>
- <details>text/x-cmml, encoded=(boolean)true</details>
- </caps>
- </pads>
- </element>
- </elements>
-</plugin>
\ No newline at end of file
diff --git a/ext/Makefile.in b/ext/Makefile.in
index fd4eb00..9063cb3 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -225,7 +225,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/aalib/Makefile.in b/ext/aalib/Makefile.in
index 20a457d..32a35ba 100644
--- a/ext/aalib/Makefile.in
+++ b/ext/aalib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/aalib/gstaasink.c b/ext/aalib/gstaasink.c
index f2d3f8a..98df1af 100644
--- a/ext/aalib/gstaasink.c
+++ b/ext/aalib/gstaasink.c
@@ -349,7 +349,7 @@
gst_query_add_allocation_pool (query, NULL, size, 2, 0);
/* we support various metadata */
- gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
+ gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
return TRUE;
diff --git a/ext/cairo/Makefile.in b/ext/cairo/Makefile.in
index 22621f2..4ce52da 100644
--- a/ext/cairo/Makefile.in
+++ b/ext/cairo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -270,7 +270,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -926,16 +928,16 @@
# these are all the rules generating the relevant files
@USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
-@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
@USE_CAIRO_GOBJECT_TRUE@ mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
@USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
-@USE_CAIRO_GOBJECT_TRUE@ glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+@USE_CAIRO_GOBJECT_TRUE@ $(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
@USE_CAIRO_GOBJECT_TRUE@ mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
@USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
-@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)glib-mkenums \
+@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)$(GLIB_MKENUMS) \
@USE_CAIRO_GOBJECT_TRUE@ --fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
@USE_CAIRO_GOBJECT_TRUE@ --fprod "\n/* enumerations from \"@filename@\" */\n" \
@USE_CAIRO_GOBJECT_TRUE@ --vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
@@ -944,7 +946,7 @@
@USE_CAIRO_GOBJECT_TRUE@$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
@USE_CAIRO_GOBJECT_TRUE@ @if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
-@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)glib-mkenums \
+@USE_CAIRO_GOBJECT_TRUE@ $(AM_V_GEN)$(GLIB_MKENUMS) \
@USE_CAIRO_GOBJECT_TRUE@ --fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
@USE_CAIRO_GOBJECT_TRUE@ --fprod "\n/* enumerations from \"@filename@\" */" \
@USE_CAIRO_GOBJECT_TRUE@ --vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \
diff --git a/ext/dv/Makefile.in b/ext/dv/Makefile.in
index a783e67..70ee4a5 100644
--- a/ext/dv/Makefile.in
+++ b/ext/dv/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -258,7 +258,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/dv/gstdvdec.c b/ext/dv/gstdvdec.c
index 39aead0..499b186 100644
--- a/ext/dv/gstdvdec.c
+++ b/ext/dv/gstdvdec.c
@@ -288,7 +288,7 @@
config = gst_buffer_pool_get_config (pool);
gst_buffer_pool_config_set_params (config, caps, size, min, max);
- if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
/* just set the option, if the pool can support it we will transparently use
* it through the video info API. We could also see if the pool support this
* option and only activate it then. */
diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c
index 794a616..7532082 100644
--- a/ext/dv/gstdvdemux.c
+++ b/ext/dv/gstdvdemux.c
@@ -301,9 +301,11 @@
gst_pad_push_event (pad, gst_event_new_segment (&dvdemux->time_segment));
if (no_more_pads) {
- gst_pad_push_event (pad,
- gst_event_new_tag ("GstDemuxer",
- gst_tag_list_new (GST_TAG_CONTAINER_FORMAT, "DV", NULL)));
+ GstTagList *tags;
+
+ tags = gst_tag_list_new (GST_TAG_CONTAINER_FORMAT, "DV", NULL);
+ gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+ gst_pad_push_event (pad, gst_event_new_tag (tags));
}
return pad;
@@ -1046,7 +1048,7 @@
/* and restart the task in case it got paused explicitely or by
* the FLUSH_START event we pushed out. */
gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_dvdemux_loop,
- demux->sinkpad);
+ demux->sinkpad, NULL);
/* and release the lock again so we can continue streaming */
GST_PAD_STREAM_UNLOCK (demux->sinkpad);
@@ -1175,6 +1177,14 @@
|| (channels != dvdemux->channels))) {
GstCaps *caps;
GstAudioInfo info;
+ gchar *stream_id;
+
+ stream_id =
+ gst_pad_create_stream_id (dvdemux->audiosrcpad,
+ GST_ELEMENT_CAST (dvdemux), "audio");
+ gst_pad_push_event (dvdemux->audiosrcpad,
+ gst_event_new_stream_start (stream_id));
+ g_free (stream_id);
dvdemux->frequency = frequency;
dvdemux->channels = channels;
@@ -1243,6 +1253,14 @@
if (G_UNLIKELY ((dvdemux->height != height) || dvdemux->wide != wide)) {
GstCaps *caps;
gint par_x, par_y;
+ gchar *stream_id;
+
+ stream_id =
+ gst_pad_create_stream_id (dvdemux->videosrcpad,
+ GST_ELEMENT_CAST (dvdemux), "video");
+ gst_pad_push_event (dvdemux->videosrcpad,
+ gst_event_new_stream_start (stream_id));
+ g_free (stream_id);
dvdemux->height = height;
dvdemux->wide = wide;
@@ -1741,6 +1759,9 @@
gst_element_post_message (GST_ELEMENT (dvdemux),
gst_message_new_segment_done (GST_OBJECT_CAST (dvdemux),
dvdemux->time_segment.format, dvdemux->time_segment.position));
+ gst_dvdemux_push_event (dvdemux,
+ gst_event_new_segment_done (dvdemux->time_segment.format,
+ dvdemux->time_segment.position));
} else {
gst_dvdemux_push_event (dvdemux, gst_event_new_eos ());
}
@@ -1766,7 +1787,7 @@
if (active) {
demux->seek_handler = gst_dvdemux_handle_pull_seek;
res = gst_pad_start_task (sinkpad,
- (GstTaskFunction) gst_dvdemux_loop, sinkpad);
+ (GstTaskFunction) gst_dvdemux_loop, sinkpad, NULL);
} else {
demux->seek_handler = NULL;
res = gst_pad_stop_task (sinkpad);
diff --git a/ext/flac/Makefile.in b/ext/flac/Makefile.in
index 2b23a3f..d61d12d 100644
--- a/ext/flac/Makefile.in
+++ b/ext/flac/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c
index 96aa128..af86a9c 100644
--- a/ext/flac/gstflacdec.c
+++ b/ext/flac/gstflacdec.c
@@ -115,9 +115,9 @@
G_DEFINE_TYPE (GstFlacDec, gst_flac_dec, GST_TYPE_AUDIO_DECODER);
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define FORMATS "{ S8LE, S16LE, S32LE } "
+#define FORMATS "{ S8LE, S16LE, S24_32LE, S32LE } "
#else
-#define FORMATS "{ S8BE, S16BE, S32BE } "
+#define FORMATS "{ S8BE, S16BE, S24_32BE, S32BE } "
#endif
#define GST_FLAC_DEC_SRC_CAPS \
@@ -377,6 +377,38 @@
else if (sr == 0x0D || sr == 0x0E)
sr_from_end = 16;
+ val = data[4];
+ /* This is slightly faster than a loop */
+ if (!(val & 0x80)) {
+ val = 0;
+ } else if ((val & 0xc0) && !(val & 0x20)) {
+ val = 1;
+ } else if ((val & 0xe0) && !(val & 0x10)) {
+ val = 2;
+ } else if ((val & 0xf0) && !(val & 0x08)) {
+ val = 3;
+ } else if ((val & 0xf8) && !(val & 0x04)) {
+ val = 4;
+ } else if ((val & 0xfc) && !(val & 0x02)) {
+ val = 5;
+ } else if ((val & 0xfe) && !(val & 0x01)) {
+ val = 6;
+ } else {
+ GST_LOG_OBJECT (flacdec, "failed to read sample/frame");
+ return FALSE;
+ }
+
+ val++;
+ headerlen = 4 + val + (bs_from_end / 8) + (sr_from_end / 8);
+
+ if (gst_flac_calculate_crc8 (data, headerlen) != data[headerlen]) {
+ GST_LOG_OBJECT (flacdec, "invalid checksum");
+ return FALSE;
+ }
+
+ if (!last_sample_num)
+ return TRUE;
+
/* FIXME: This is can be 36 bit if variable block size is used,
* fortunately not encoder supports this yet and we check for that
* above.
@@ -388,14 +420,6 @@
return FALSE;
}
- headerlen = 4 + g_unichar_to_utf8 ((gunichar) val, NULL) +
- (bs_from_end / 8) + (sr_from_end / 8);
-
- if (gst_flac_calculate_crc8 (data, headerlen) != data[headerlen]) {
- GST_LOG_OBJECT (flacdec, "invalid checksum");
- return FALSE;
- }
-
if (flacdec->min_blocksize == flacdec->max_blocksize) {
*last_sample_num = (val + 1) * flacdec->min_blocksize;
} else {
@@ -446,7 +470,7 @@
switch (metadata->type) {
case FLAC__METADATA_TYPE_STREAMINFO:{
gint64 samples;
- guint depth, width;
+ guint depth, width, gdepth;
samples = metadata->data.stream_info.total_samples;
@@ -454,15 +478,19 @@
flacdec->max_blocksize = metadata->data.stream_info.max_blocksize;
flacdec->depth = depth = metadata->data.stream_info.bits_per_sample;
- if (depth < 9)
- width = 8;
- else if (depth < 17)
- width = 16;
- else
+ if (depth < 9) {
+ gdepth = width = 8;
+ } else if (depth < 17) {
+ gdepth = width = 16;
+ } else if (depth < 25) {
+ gdepth = 24;
width = 32;
+ } else {
+ gdepth = width = 32;
+ }
gst_audio_info_set_format (&flacdec->info,
- gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, width),
+ gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, gdepth),
metadata->data.stream_info.sample_rate,
metadata->data.stream_info.channels, NULL);
@@ -551,7 +579,7 @@
GstFlowReturn ret = GST_FLOW_OK;
GstBuffer *outbuf;
guint depth = frame->header.bits_per_sample;
- guint width;
+ guint width, gdepth;
guint sample_rate = frame->header.sample_rate;
guint channels = frame->header.channels;
guint samples = frame->header.blocksize;
@@ -574,17 +602,20 @@
switch (depth) {
case 8:
- width = 8;
+ gdepth = width = 8;
break;
case 12:
case 16:
- width = 16;
+ gdepth = width = 16;
break;
case 20:
case 24:
- case 32:
+ gdepth = 24;
width = 32;
break;
+ case 32:
+ gdepth = width = 32;
+ break;
default:
GST_ERROR_OBJECT (flacdec, "unsupported depth %d", depth);
ret = GST_FLOW_ERROR;
@@ -601,9 +632,10 @@
}
}
- caps_changed = (sample_rate != flacdec->info.rate)
- || (width != flacdec->info.finfo->width)
- || (channels != flacdec->info.channels);
+ caps_changed = (sample_rate != GST_AUDIO_INFO_RATE (&flacdec->info))
+ || (width != GST_AUDIO_INFO_WIDTH (&flacdec->info))
+ || (gdepth != GST_AUDIO_INFO_DEPTH (&flacdec->info))
+ || (channels != GST_AUDIO_INFO_CHANNELS (&flacdec->info));
if (caps_changed
|| !gst_pad_has_current_caps (GST_AUDIO_DECODER_SRC_PAD (flacdec))) {
@@ -611,7 +643,7 @@
channels);
gst_audio_info_set_format (&flacdec->info,
- gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, width),
+ gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, gdepth),
sample_rate, channels, NULL);
memcpy (flacdec->info.position,
@@ -638,10 +670,11 @@
gint8 *outbuffer = (gint8 *) map.data;
gint *reorder_map = flacdec->channel_reorder_map;
- if (width != depth) {
+ if (gdepth != depth) {
for (i = 0; i < samples; i++) {
for (j = 0; j < channels; j++) {
- *outbuffer++ = (gint8) (buffer[reorder_map[j]][i] << (width - depth));
+ *outbuffer++ =
+ (gint8) (buffer[reorder_map[j]][i] << (gdepth - depth));
}
}
} else {
@@ -655,11 +688,11 @@
gint16 *outbuffer = (gint16 *) map.data;
gint *reorder_map = flacdec->channel_reorder_map;
- if (width != depth) {
+ if (gdepth != depth) {
for (i = 0; i < samples; i++) {
for (j = 0; j < channels; j++) {
*outbuffer++ =
- (gint16) (buffer[reorder_map[j]][i] << (width - depth));
+ (gint16) (buffer[reorder_map[j]][i] << (gdepth - depth));
}
}
} else {
@@ -673,11 +706,11 @@
gint32 *outbuffer = (gint32 *) map.data;
gint *reorder_map = flacdec->channel_reorder_map;
- if (width != depth) {
+ if (gdepth != depth) {
for (i = 0; i < samples; i++) {
for (j = 0; j < channels; j++) {
*outbuffer++ =
- (gint32) (buffer[reorder_map[j]][i] << (width - depth));
+ (gint32) (buffer[reorder_map[j]][i] << (gdepth - depth));
}
}
} else {
@@ -759,13 +792,12 @@
/* drop any in-stream headers, we've processed those in set_format already */
if (G_UNLIKELY (!dec->got_headers)) {
gboolean got_audio_frame;
- gint64 unused;
GstMapInfo map;
/* check if this is a flac audio frame (rather than a header or junk) */
gst_buffer_map (buf, &map, GST_MAP_READ);
got_audio_frame =
- gst_flac_dec_scan_got_frame (dec, map.data, map.size, &unused);
+ gst_flac_dec_scan_got_frame (dec, map.data, map.size, NULL);
gst_buffer_unmap (buf, &map);
if (!got_audio_frame) {
diff --git a/ext/flac/gstflacenc.c b/ext/flac/gstflacenc.c
index 069f48d..a7cb219 100644
--- a/ext/flac/gstflacenc.c
+++ b/ext/flac/gstflacenc.c
@@ -140,7 +140,9 @@
#define gst_flac_enc_parent_class parent_class
G_DEFINE_TYPE_WITH_CODE (GstFlacEnc, gst_flac_enc, GST_TYPE_AUDIO_ENCODER,
- G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL));
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL)
+ G_IMPLEMENT_INTERFACE (GST_TYPE_TOC_SETTER, NULL)
+ );
static gboolean gst_flac_enc_start (GstAudioEncoder * enc);
static gboolean gst_flac_enc_stop (GstAudioEncoder * enc);
@@ -415,6 +417,7 @@
flacenc->offset = 0;
flacenc->eos = FALSE;
flacenc->tags = gst_tag_list_new_empty ();
+ flacenc->toc = NULL;
return TRUE;
}
@@ -425,8 +428,11 @@
GstFlacEnc *flacenc = GST_FLAC_ENC (enc);
GST_DEBUG_OBJECT (enc, "stop");
- gst_tag_list_free (flacenc->tags);
+ gst_tag_list_unref (flacenc->tags);
flacenc->tags = NULL;
+ if (flacenc->toc)
+ gst_toc_unref (flacenc->toc);
+ flacenc->toc = NULL;
if (FLAC__stream_encoder_get_state (flacenc->encoder) !=
FLAC__STREAM_ENCODER_UNINITIALIZED) {
flacenc->stopped = TRUE;
@@ -441,6 +447,9 @@
if (flacenc->meta[2])
FLAC__metadata_object_delete (flacenc->meta[2]);
+ if (flacenc->meta[3])
+ FLAC__metadata_object_delete (flacenc->meta[3]);
+
g_free (flacenc->meta);
flacenc->meta = NULL;
}
@@ -449,6 +458,7 @@
flacenc->headers = NULL;
gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
+ gst_toc_setter_reset (GST_TOC_SETTER (enc));
return TRUE;
}
@@ -481,17 +491,94 @@
g_list_free (comments);
}
+static gboolean
+add_cuesheet (const GstToc * toc, guint sample_rate,
+ FLAC__StreamMetadata * cuesheet)
+{
+ gint8 track_num = 0;
+ gint64 start, stop;
+ gchar *isrc = NULL;
+ const gchar *is_legal;
+ GList *list;
+ GstTagList *tags;
+ GstTocEntry *entry;
+ FLAC__StreamMetadata_CueSheet *cs;
+ FLAC__StreamMetadata_CueSheet_Track *track;
+
+ cs = &cuesheet->data.cue_sheet;
+ if (!cs)
+ return FALSE;
+
+ /* check if the TOC entries is valid */
+ list = gst_toc_get_entries (toc);
+ while (list) {
+ entry = list->data;
+ if (!gst_toc_entry_is_sequence (entry))
+ return FALSE;
+ list = g_list_next (list);
+ }
+
+ /* add tracks in cuesheet */
+ list = gst_toc_get_entries (toc);
+ while (list) {
+ entry = list->data;
+ gst_toc_entry_get_start_stop_times (entry, &start, &stop);
+ tags = gst_toc_entry_get_tags (entry);
+ if (tags)
+ gst_tag_list_get_string (tags, GST_TAG_ISRC, &isrc);
+ track = FLAC__metadata_object_cuesheet_track_new ();
+ track->offset =
+ (FLAC__uint64) gst_util_uint64_scale_round (start, sample_rate,
+ GST_SECOND);
+ track->number = (FLAC__byte) track_num + 1;
+ if (isrc)
+ strcpy (track->isrc, isrc);
+ if (track->number <= 0)
+ return FALSE;
+ if (!FLAC__metadata_object_cuesheet_insert_track (cuesheet, track_num,
+ track, FALSE))
+ return FALSE;
+ if (!FLAC__metadata_object_cuesheet_track_insert_blank_index (cuesheet,
+ track_num, 0))
+ return FALSE;
+ track_num++;
+ list = g_list_next (list);
+ }
+
+ if (cs->num_tracks <= 0)
+ return FALSE;
+
+ /* add lead-out track in cuesheet */
+ track = FLAC__metadata_object_cuesheet_track_new ();
+ track->offset =
+ (FLAC__uint64) gst_util_uint64_scale_round (stop, sample_rate,
+ GST_SECOND);
+ track->number = 255;
+ if (!FLAC__metadata_object_cuesheet_insert_track (cuesheet, cs->num_tracks,
+ track, FALSE))
+ return FALSE;
+
+ /* check if the cuesheet is valid */
+ if (!FLAC__metadata_object_cuesheet_is_legal (cuesheet, FALSE, &is_legal)) {
+ g_warning ("%s\n", is_legal);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static void
-gst_flac_enc_set_metadata (GstFlacEnc * flacenc, guint64 total_samples)
+gst_flac_enc_set_metadata (GstFlacEnc * flacenc, GstAudioInfo * info,
+ guint64 total_samples)
{
const GstTagList *user_tags;
GstTagList *copy;
gint entries = 1;
gint n_images, n_preview_images;
- GstAudioInfo *info =
- gst_audio_encoder_get_audio_info (GST_AUDIO_ENCODER (flacenc));
+ FLAC__StreamMetadata *cuesheet;
g_return_if_fail (flacenc != NULL);
+
user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (flacenc));
if ((flacenc->tags == NULL) && (user_tags == NULL)) {
return;
@@ -502,38 +589,48 @@
n_preview_images = gst_tag_list_get_tag_size (copy, GST_TAG_PREVIEW_IMAGE);
flacenc->meta =
- g_new0 (FLAC__StreamMetadata *, 3 + n_images + n_preview_images);
+ g_new0 (FLAC__StreamMetadata *, 4 + n_images + n_preview_images);
flacenc->meta[0] =
FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT);
gst_tag_list_foreach (copy, add_one_tag, flacenc);
+ if (!flacenc->toc)
+ flacenc->toc = gst_toc_setter_get_toc (GST_TOC_SETTER (flacenc));
+
+ if (flacenc->toc) {
+ cuesheet = FLAC__metadata_object_new (FLAC__METADATA_TYPE_CUESHEET);
+ if (add_cuesheet (flacenc->toc, GST_AUDIO_INFO_RATE (info), cuesheet)) {
+ flacenc->meta[entries] = cuesheet;
+ entries++;
+ } else {
+ FLAC__metadata_object_delete (cuesheet);
+ flacenc->meta[entries] = NULL;
+ }
+ }
+
if (n_images + n_preview_images > 0) {
+ GstSample *sample;
GstBuffer *buffer;
-#if 0
- GstCaps *caps;
- GstStructure *structure;
+ const GstStructure *structure;
GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
-#endif
gint i;
GstMapInfo map;
for (i = 0; i < n_images + n_preview_images; i++) {
if (i < n_images) {
- if (!gst_tag_list_get_buffer_index (copy, GST_TAG_IMAGE, i, &buffer))
+ if (!gst_tag_list_get_sample_index (copy, GST_TAG_IMAGE, i, &sample))
continue;
} else {
- if (!gst_tag_list_get_buffer_index (copy, GST_TAG_PREVIEW_IMAGE,
- i - n_images, &buffer))
+ if (!gst_tag_list_get_sample_index (copy, GST_TAG_PREVIEW_IMAGE,
+ i - n_images, &sample))
continue;
}
flacenc->meta[entries] =
FLAC__metadata_object_new (FLAC__METADATA_TYPE_PICTURE);
-#if 0
- caps = gst_buffer_get_caps (buffer);
- structure = gst_caps_get_structure (caps, 0);
+ structure = gst_sample_get_info (sample);
gst_structure_get (structure, "image-type", GST_TYPE_TAG_IMAGE_TYPE,
&image_type, NULL);
@@ -542,22 +639,19 @@
image_type = (i < n_images) ? 0x00 : 0x01;
else
image_type = image_type + 2;
-#endif
+ buffer = gst_sample_get_buffer (sample);
gst_buffer_map (buffer, &map, GST_MAP_READ);
FLAC__metadata_object_picture_set_data (flacenc->meta[entries],
map.data, map.size, TRUE);
gst_buffer_unmap (buffer, &map);
-#if 0
/* FIXME: There's no way to set the picture type in libFLAC */
flacenc->meta[entries]->data.picture.type = image_type;
FLAC__metadata_object_picture_set_mime_type (flacenc->meta[entries],
(char *) gst_structure_get_name (structure), TRUE);
- gst_caps_unref (caps);
-#endif
- gst_buffer_unref (buffer);
+ gst_sample_unref (sample);
entries++;
}
}
@@ -601,7 +695,7 @@
flacenc->meta, entries) != true)
g_warning ("Dude, i'm already initialized!");
- gst_tag_list_free (copy);
+ gst_tag_list_unref (copy);
}
static GstCaps *
@@ -649,7 +743,7 @@
guint64 channel_mask;
gst_audio_channel_positions_to_mask (channel_positions[i - 1], i,
- &channel_mask);
+ FALSE, &channel_mask);
gst_structure_set (s2, "channels", G_TYPE_INT, i, "channel-mask",
GST_TYPE_BITMASK, channel_mask, NULL);
}
@@ -661,7 +755,7 @@
GST_DEBUG_OBJECT (pad, "Return caps %" GST_PTR_FORMAT, ret);
- caps = gst_audio_encoder_proxy_getcaps (enc, ret);
+ caps = gst_audio_encoder_proxy_getcaps (enc, ret, filter);
gst_caps_unref (ret);
return caps;
@@ -706,7 +800,6 @@
GstFlacEnc *flacenc;
guint64 total_samples = GST_CLOCK_TIME_NONE;
FLAC__StreamEncoderInitStatus init_status;
- GstCaps *caps;
flacenc = GST_FLAC_ENC (enc);
@@ -715,14 +808,7 @@
FLAC__STREAM_ENCODER_UNINITIALIZED)
goto encoder_already_initialized;
- caps = gst_caps_new_simple ("audio/x-flac",
- "channels", G_TYPE_INT, GST_AUDIO_INFO_CHANNELS (info),
- "rate", G_TYPE_INT, GST_AUDIO_INFO_RATE (info), NULL);
-
- if (!gst_audio_encoder_set_output_format (enc, caps))
- goto setting_src_caps_failed;
-
- gst_caps_unref (caps);
+ /* delay setting output caps/format until we have all headers */
gst_audio_get_channel_reorder_map (GST_AUDIO_INFO_CHANNELS (info),
channel_positions[GST_AUDIO_INFO_CHANNELS (info) - 1], info->position,
@@ -732,7 +818,7 @@
GST_AUDIO_ENCODER_SINK_PAD (enc));
FLAC__stream_encoder_set_bits_per_sample (flacenc->encoder,
- GST_AUDIO_INFO_WIDTH (info));
+ GST_AUDIO_INFO_DEPTH (info));
FLAC__stream_encoder_set_sample_rate (flacenc->encoder,
GST_AUDIO_INFO_RATE (info));
FLAC__stream_encoder_set_channels (flacenc->encoder,
@@ -742,7 +828,7 @@
FLAC__stream_encoder_set_total_samples_estimate (flacenc->encoder,
MIN (total_samples, G_GUINT64_CONSTANT (0x0FFFFFFFFF)));
- gst_flac_enc_set_metadata (flacenc, total_samples);
+ gst_flac_enc_set_metadata (flacenc, info, total_samples);
/* callbacks clear to go now;
* write callbacks receives headers during init */
@@ -763,13 +849,6 @@
g_warning ("flac already initialized -- fixme allow this");
return FALSE;
}
-setting_src_caps_failed:
- {
- GST_DEBUG_OBJECT (flacenc,
- "Couldn't set caps on source pad: %" GST_PTR_FORMAT, caps);
- gst_caps_unref (caps);
- return FALSE;
- }
failed_to_initialize:
{
GST_ELEMENT_ERROR (flacenc, LIBRARY, INIT, (NULL),
@@ -1116,6 +1195,7 @@
{
GstFlacEnc *flacenc;
GstTagList *taglist;
+ GstToc *toc;
gboolean ret = FALSE;
flacenc = GST_FLAC_ENC (enc);
@@ -1137,6 +1217,17 @@
}
ret = GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (enc, event);
break;
+ case GST_EVENT_TOC:
+ gst_event_parse_toc (event, &toc, NULL);
+ if (toc) {
+ if (flacenc->toc != toc) {
+ if (flacenc->toc)
+ gst_toc_unref (flacenc->toc);
+ flacenc->toc = toc;
+ }
+ }
+ ret = GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (enc, event);
+ break;
default:
ret = GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (enc, event);
break;
@@ -1232,7 +1323,7 @@
gst_buffer_unmap (buffer, &map);
res = FLAC__stream_encoder_process_interleaved (flacenc->encoder,
- (const FLAC__int32 *) data, samples / channels);
+ (const FLAC__int32 *) data, samples);
g_free (data);
diff --git a/ext/flac/gstflacenc.h b/ext/flac/gstflacenc.h
index 0a4e2b4..690b098 100644
--- a/ext/flac/gstflacenc.h
+++ b/ext/flac/gstflacenc.h
@@ -57,6 +57,7 @@
FLAC__StreamMetadata **meta;
GstTagList * tags;
+ GstToc * toc;
gboolean eos;
/* queue headers until we have them all so we can add streamheaders to caps */
diff --git a/ext/flac/gstflactag.c b/ext/flac/gstflactag.c
index d7455ac..3dffc6a 100644
--- a/ext/flac/gstflactag.c
+++ b/ext/flac/gstflactag.c
@@ -142,7 +142,7 @@
tag->vorbiscomment = NULL;
}
if (tag->tags) {
- gst_tag_list_free (tag->tags);
+ gst_tag_list_unref (tag->tags);
tag->tags = NULL;
}
@@ -319,7 +319,7 @@
id_data, 4, NULL);
if (tag->tags != NULL) {
gst_pad_push_event (tag->srcpad,
- gst_event_new_tag ("GstFlacTag", gst_tag_list_copy (tag->tags)));
+ gst_event_new_tag (gst_tag_list_ref (tag->tags)));
}
gst_buffer_unref (tag->vorbiscomment);
@@ -377,7 +377,7 @@
buffer = gst_tag_list_to_vorbiscomment_buffer (merged_tags, header,
sizeof (header), NULL);
GST_DEBUG_OBJECT (tag, "Writing tags %" GST_PTR_FORMAT, merged_tags);
- gst_tag_list_free (merged_tags);
+ gst_tag_list_unref (merged_tags);
if (buffer == NULL)
goto no_comment;
@@ -483,7 +483,7 @@
tag->vorbiscomment = NULL;
}
if (tag->tags) {
- gst_tag_list_free (tag->tags);
+ gst_tag_list_unref (tag->tags);
tag->tags = NULL;
}
tag->metadata_block_size = 0;
diff --git a/ext/gdk_pixbuf/Makefile.in b/ext/gdk_pixbuf/Makefile.in
index 0b8f7a7..6c065f4 100644
--- a/ext/gdk_pixbuf/Makefile.in
+++ b/ext/gdk_pixbuf/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/jack/Makefile.in b/ext/jack/Makefile.in
index f079dda..4372e55 100644
--- a/ext/jack/Makefile.in
+++ b/ext/jack/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/jpeg/Makefile.in b/ext/jpeg/Makefile.in
index 8e4e121..878d6cd 100644
--- a/ext/jpeg/Makefile.in
+++ b/ext/jpeg/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c
index c595d0e..54abe4e 100644
--- a/ext/jpeg/gstjpegdec.c
+++ b/ext/jpeg/gstjpegdec.c
@@ -28,9 +28,8 @@
* <refsect2>
* <title>Example launch line</title>
* |[
- * gst-launch -v v4l2src ! jpegdec ! ffmpegcolorspace ! xvimagesink
- * ]| The above pipeline reads a motion JPEG stream from a v4l2 camera
- * and renders it to the screen.
+ * gst-launch -v filesrc location=mjpeg.avi ! avidemux ! queue ! jpegdec ! videoconvert ! videoscale ! autovideosink
+ * ]| The above pipeline decode the mjpeg stream and renders it to the screen.
* </refsect2>
*/
@@ -1051,6 +1050,8 @@
gst_video_codec_state_unref (outstate);
+ gst_video_decoder_negotiate (GST_VIDEO_DECODER (dec));
+
GST_DEBUG_OBJECT (dec, "max_v_samp_factor=%d", dec->cinfo.max_v_samp_factor);
GST_DEBUG_OBJECT (dec, "max_h_samp_factor=%d", dec->cinfo.max_h_samp_factor);
}
@@ -1167,7 +1168,7 @@
gst_jpeg_dec_negotiate (dec, width, height, dec->cinfo.jpeg_color_space);
state = gst_video_decoder_get_output_state (bdec);
- ret = gst_video_decoder_alloc_output_frame (bdec, frame);
+ ret = gst_video_decoder_allocate_output_frame (bdec, frame);
if (G_UNLIKELY (ret != GST_FLOW_OK))
goto alloc_failed;
@@ -1315,18 +1316,20 @@
static gboolean
gst_jpeg_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
{
- GstBufferPool *pool;
+ GstBufferPool *pool = NULL;
GstStructure *config;
if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (bdec, query))
return FALSE;
- g_assert (gst_query_get_n_allocation_pools (query) > 0);
- gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
- g_assert (pool != NULL);
+ if (gst_query_get_n_allocation_pools (query) > 0)
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
+
+ if (pool == NULL)
+ return FALSE;
config = gst_buffer_pool_get_config (pool);
- if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
gst_buffer_pool_config_add_option (config,
GST_BUFFER_POOL_OPTION_VIDEO_META);
}
diff --git a/ext/jpeg/gstjpegenc.c b/ext/jpeg/gstjpegenc.c
index 8521522..e9173ff 100644
--- a/ext/jpeg/gstjpegenc.c
+++ b/ext/jpeg/gstjpegenc.c
@@ -248,6 +248,8 @@
gst_video_frame_unmap (&jpegenc->current_vframe);
+ GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (jpegenc->current_frame);
+
gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (jpegenc),
jpegenc->current_frame);
jpegenc->current_frame = NULL;
@@ -531,7 +533,7 @@
static gboolean
gst_jpegenc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
{
- gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
+ gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
query);
diff --git a/ext/libcaca/Makefile.in b/ext/libcaca/Makefile.in
index 89c3816..0ea80e5 100644
--- a/ext/libcaca/Makefile.in
+++ b/ext/libcaca/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/libpng/Makefile.in b/ext/libpng/Makefile.in
index 632e207..f18de15 100644
--- a/ext/libpng/Makefile.in
+++ b/ext/libpng/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/libpng/gstpngdec.c b/ext/libpng/gstpngdec.c
index a9c3a32..1178958 100644
--- a/ext/libpng/gstpngdec.c
+++ b/ext/libpng/gstpngdec.c
@@ -134,7 +134,7 @@
/* Allocate output buffer */
ret =
- gst_video_decoder_alloc_output_frame (GST_VIDEO_DECODER (pngdec),
+ gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (pngdec),
pngdec->current_frame);
if (G_UNLIKELY (ret != GST_FLOW_OK))
GST_DEBUG_OBJECT (pngdec, "failed to acquire buffer");
@@ -330,6 +330,7 @@
pngdec->output_state =
gst_video_decoder_set_output_state (GST_VIDEO_DECODER (pngdec), format,
width, height, pngdec->input_state);
+ gst_video_decoder_negotiate (GST_VIDEO_DECODER (pngdec));
GST_DEBUG ("Final %d %d", GST_VIDEO_INFO_WIDTH (&pngdec->output_state->info),
GST_VIDEO_INFO_HEIGHT (&pngdec->output_state->info));
@@ -393,18 +394,20 @@
static gboolean
gst_pngdec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
{
- GstBufferPool *pool;
+ GstBufferPool *pool = NULL;
GstStructure *config;
if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (bdec, query))
return FALSE;
- g_assert (gst_query_get_n_allocation_pools (query) > 0);
- gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
- g_assert (pool != NULL);
+ if (gst_query_get_n_allocation_pools (query) > 0)
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
+
+ if (pool == NULL)
+ return FALSE;
config = gst_buffer_pool_get_config (pool);
- if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
gst_buffer_pool_config_add_option (config,
GST_BUFFER_POOL_OPTION_VIDEO_META);
}
diff --git a/ext/libpng/gstpngenc.c b/ext/libpng/gstpngenc.c
index 9d3e1d0..d13fa65 100644
--- a/ext/libpng/gstpngenc.c
+++ b/ext/libpng/gstpngenc.c
@@ -371,7 +371,7 @@
static gboolean
gst_pngenc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
{
- gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
+ gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
query);
diff --git a/ext/pulse/Makefile.in b/ext/pulse/Makefile.in
index 22c0379..729cfa9 100644
--- a/ext/pulse/Makefile.in
+++ b/ext/pulse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/raw1394/Makefile.in b/ext/raw1394/Makefile.in
index bc8dabf..f6494a3 100644
--- a/ext/raw1394/Makefile.in
+++ b/ext/raw1394/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -255,7 +255,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/shout2/Makefile.in b/ext/shout2/Makefile.in
index a71ae75..1987876 100644
--- a/ext/shout2/Makefile.in
+++ b/ext/shout2/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/shout2/gstshout2.c b/ext/shout2/gstshout2.c
index 58a0da7..74818c8 100644
--- a/ext/shout2/gstshout2.c
+++ b/ext/shout2/gstshout2.c
@@ -259,7 +259,7 @@
g_free (shout2send->mount);
g_free (shout2send->url);
- gst_tag_list_free (shout2send->tags);
+ gst_tag_list_unref (shout2send->tags);
gst_poll_free (shout2send->timer);
@@ -348,7 +348,7 @@
shout_metadata_free (pmetadata);
}
- gst_tag_list_free (copy);
+ gst_tag_list_unref (copy);
}
#endif
diff --git a/ext/soup/Makefile.in b/ext/soup/Makefile.in
index 5c17ba7..0d93b4e 100644
--- a/ext/soup/Makefile.in
+++ b/ext/soup/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c
index 40ff92f..581cf14 100644
--- a/ext/soup/gstsouphttpsrc.c
+++ b/ext/soup/gstsouphttpsrc.c
@@ -669,7 +669,7 @@
if (src->automatic_redirect && SOUP_STATUS_IS_REDIRECTION (msg->status_code)) {
GST_DEBUG_OBJECT (src, "%u redirect to \"%s\"", msg->status_code,
- soup_message_headers_get (msg->response_headers, "Location"));
+ soup_message_headers_get_one (msg->response_headers, "Location"));
return;
}
@@ -701,7 +701,7 @@
tag_list = gst_tag_list_new_empty ();
if ((value =
- soup_message_headers_get (msg->response_headers,
+ soup_message_headers_get_one (msg->response_headers,
"icy-metaint")) != NULL) {
gint icy_metaint = atoi (value);
@@ -757,7 +757,7 @@
g_hash_table_destroy (params);
if ((value =
- soup_message_headers_get (msg->response_headers,
+ soup_message_headers_get_one (msg->response_headers,
"icy-name")) != NULL) {
g_free (src->iradio_name);
src->iradio_name = gst_soup_http_src_unicodify (value);
@@ -767,7 +767,7 @@
}
}
if ((value =
- soup_message_headers_get (msg->response_headers,
+ soup_message_headers_get_one (msg->response_headers,
"icy-genre")) != NULL) {
g_free (src->iradio_genre);
src->iradio_genre = gst_soup_http_src_unicodify (value);
@@ -776,7 +776,7 @@
src->iradio_genre, NULL);
}
}
- if ((value = soup_message_headers_get (msg->response_headers, "icy-url"))
+ if ((value = soup_message_headers_get_one (msg->response_headers, "icy-url"))
!= NULL) {
g_free (src->iradio_url);
src->iradio_url = gst_soup_http_src_unicodify (value);
@@ -788,10 +788,9 @@
if (!gst_tag_list_is_empty (tag_list)) {
GST_DEBUG_OBJECT (src,
"calling gst_element_found_tags with %" GST_PTR_FORMAT, tag_list);
- gst_pad_push_event (GST_BASE_SRC_PAD (src), gst_event_new_tag ("GstSrc",
- tag_list));
+ gst_pad_push_event (GST_BASE_SRC_PAD (src), gst_event_new_tag (tag_list));
} else {
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
}
/* Handle HTTP errors. */
diff --git a/ext/speex/Makefile.in b/ext/speex/Makefile.in
index 09d2889..2bba93f 100644
--- a/ext/speex/Makefile.in
+++ b/ext/speex/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/speex/gstspeexdec.c b/ext/speex/gstspeexdec.c
index fd1a800..1478cfd 100644
--- a/ext/speex/gstspeexdec.c
+++ b/ext/speex/gstspeexdec.c
@@ -312,7 +312,7 @@
gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), list,
GST_TAG_MERGE_REPLACE);
- gst_tag_list_free (list);
+ gst_tag_list_unref (list);
g_free (encoder);
g_free (ver);
diff --git a/ext/speex/gstspeexenc.c b/ext/speex/gstspeexenc.c
index f475cab..15f1aac 100644
--- a/ext/speex/gstspeexenc.c
+++ b/ext/speex/gstspeexenc.c
@@ -269,7 +269,7 @@
enc->state = NULL;
}
speex_bits_destroy (&enc->bits);
- gst_tag_list_free (enc->tags);
+ gst_tag_list_unref (enc->tags);
enc->tags = NULL;
gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
@@ -350,7 +350,7 @@
GST_DEBUG_OBJECT (enc, "merged tags = %" GST_PTR_FORMAT, merged_tags);
comments = gst_tag_list_to_vorbiscomment_buffer (merged_tags, NULL,
0, "Encoded with GStreamer Speexenc");
- gst_tag_list_free (merged_tags);
+ gst_tag_list_unref (merged_tags);
GST_BUFFER_OFFSET (comments) = 0;
GST_BUFFER_OFFSET_END (comments) = 0;
diff --git a/ext/taglib/Makefile.in b/ext/taglib/Makefile.in
index 5585916..6883b1b 100644
--- a/ext/taglib/Makefile.in
+++ b/ext/taglib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -264,7 +264,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/wavpack/Makefile.in b/ext/wavpack/Makefile.in
index b41449f..3c5871a 100644
--- a/ext/wavpack/Makefile.in
+++ b/ext/wavpack/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -252,7 +252,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ext/wavpack/gstwavpackdec.c b/ext/wavpack/gstwavpackdec.c
index 9351af9..1c34fe0 100644
--- a/ext/wavpack/gstwavpackdec.c
+++ b/ext/wavpack/gstwavpackdec.c
@@ -209,6 +209,7 @@
dec->width = 32;
break;
default:
+ fmt = GST_AUDIO_FORMAT_UNKNOWN;
g_assert_not_reached ();
break;
}
@@ -258,9 +259,8 @@
bitrate = gst_util_uint64_scale (size, 8 * GST_SECOND, duration);
gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE,
(guint) bitrate, NULL);
-
- gst_element_post_message (GST_ELEMENT (dec),
- gst_message_new_tag (GST_OBJECT (dec), list));
+ gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec), list,
+ GST_TAG_MERGE_REPLACE);
}
}
diff --git a/ext/wavpack/gstwavpackenc.c b/ext/wavpack/gstwavpackenc.c
index 5753254..6115e8d 100644
--- a/ext/wavpack/gstwavpackenc.c
+++ b/ext/wavpack/gstwavpackenc.c
@@ -400,7 +400,7 @@
enc->channel_mapping);
/* wavpack caps hold gst mask, not wavpack mask */
- gst_audio_channel_positions_to_mask (opos, enc->channels, &mask);
+ gst_audio_channel_positions_to_mask (opos, enc->channels, FALSE, &mask);
/* set fixed src pad caps now that we know what we will get */
caps = gst_caps_new_simple ("audio/x-wavpack",
diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap
index 5c262bf..da94cb9 100644
--- a/gst-plugins-good.doap
+++ b/gst-plugins-good.doap
@@ -34,6 +34,16 @@
<release>
<Version>
+ <revision>0.11.93</revision>
+ <branch>0.11</branch>
+ <name>Poetic Pitbull Revolutions</name>
+ <created>2012-08-08</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.11.93.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>0.11.92</revision>
<branch>0.11</branch>
<name>Money</name>
diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec
index d7383da..798f2b7 100644
--- a/gst-plugins-good.spec
+++ b/gst-plugins-good.spec
@@ -4,7 +4,7 @@
%define gst_minver 0.11.0
Name: %{gstreamer}-plugins-good
-Version: 0.11.92
+Version: 0.11.93
Release: 1.gst
Summary: GStreamer plug-ins with good code and licensing
@@ -12,7 +12,7 @@
License: LGPL
URL: http://gstreamer.freedesktop.org/
Vendor: GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
-Source: http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.gz
+Source: http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: %{gstreamer} >= %{gst_minver}
@@ -92,7 +92,7 @@
%{_libdir}/gstreamer-%{majorminor}/libgstrtsp.so
%{_libdir}/gstreamer-%{majorminor}/libgstsmpte.so
%{_libdir}/gstreamer-%{majorminor}/libgstudp.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
%{_libdir}/gstreamer-%{majorminor}/libgstwavenc.so
%{_libdir}/gstreamer-%{majorminor}/libgstwavparse.so
%{_libdir}/gstreamer-%{majorminor}/libgstauparse.so
@@ -100,7 +100,7 @@
%{_libdir}/gstreamer-%{majorminor}/libgstnavigationtest.so
%{_libdir}/gstreamer-%{majorminor}/libgstalphacolor.so
#%{_libdir}/gstreamer-%{majorminor}/libgstcairo.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
+%{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
%{_libdir}/gstreamer-%{majorminor}/libgstmatroska.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideomixer.so
%{_libdir}/gstreamer-%{majorminor}/libgstcutter.so
@@ -108,7 +108,7 @@
%{_libdir}/gstreamer-%{majorminor}/libgstid3demux.so
#%{_libdir}/gstreamer-%{majorminor}/libgstgdkpixbuf.so
%{_libdir}/gstreamer-%{majorminor}/libgstapetag.so
-%{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
+# %{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideocrop.so
%{_libdir}/gstreamer-%{majorminor}/libgsticydemux.so
%{_libdir}/gstreamer-%{majorminor}/libgsttaglib.so
@@ -123,7 +123,7 @@
# %{_libdir}/gstreamer-%{majorminor}/libgstdeinterlace.so
%{_libdir}/gstreamer-%{majorminor}/libgstflv.so
%{_libdir}/gstreamer-%{majorminor}/libgsty4menc.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
+%{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
%{_libdir}/gstreamer-%{majorminor}/libgstimagefreeze.so
%{_libdir}/gstreamer-%{majorminor}/libgstshapewipe.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideofilter.so
diff --git a/gst-plugins-good.spec.in b/gst-plugins-good.spec.in
index cb1d1d5..1e86084 100644
--- a/gst-plugins-good.spec.in
+++ b/gst-plugins-good.spec.in
@@ -12,7 +12,7 @@
License: LGPL
URL: http://gstreamer.freedesktop.org/
Vendor: GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
-Source: http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.gz
+Source: http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: %{gstreamer} >= %{gst_minver}
@@ -92,7 +92,7 @@
%{_libdir}/gstreamer-%{majorminor}/libgstrtsp.so
%{_libdir}/gstreamer-%{majorminor}/libgstsmpte.so
%{_libdir}/gstreamer-%{majorminor}/libgstudp.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideobox.so
%{_libdir}/gstreamer-%{majorminor}/libgstwavenc.so
%{_libdir}/gstreamer-%{majorminor}/libgstwavparse.so
%{_libdir}/gstreamer-%{majorminor}/libgstauparse.so
@@ -100,7 +100,7 @@
%{_libdir}/gstreamer-%{majorminor}/libgstnavigationtest.so
%{_libdir}/gstreamer-%{majorminor}/libgstalphacolor.so
@USE_CAIRO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstcairo.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
+%{_libdir}/gstreamer-%{majorminor}/libgstflxdec.so
%{_libdir}/gstreamer-%{majorminor}/libgstmatroska.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideomixer.so
%{_libdir}/gstreamer-%{majorminor}/libgstcutter.so
@@ -108,7 +108,7 @@
%{_libdir}/gstreamer-%{majorminor}/libgstid3demux.so
@USE_GDK_PIXBUF_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstgdkpixbuf.so
%{_libdir}/gstreamer-%{majorminor}/libgstapetag.so
-%{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
+# %{_libdir}/gstreamer-%{majorminor}/libgstannodex.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideocrop.so
%{_libdir}/gstreamer-%{majorminor}/libgsticydemux.so
%{_libdir}/gstreamer-%{majorminor}/libgsttaglib.so
@@ -123,7 +123,7 @@
# %{_libdir}/gstreamer-%{majorminor}/libgstdeinterlace.so
%{_libdir}/gstreamer-%{majorminor}/libgstflv.so
%{_libdir}/gstreamer-%{majorminor}/libgsty4menc.so
-# %{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
+%{_libdir}/gstreamer-%{majorminor}/libgstoss4audio.so
%{_libdir}/gstreamer-%{majorminor}/libgstimagefreeze.so
%{_libdir}/gstreamer-%{majorminor}/libgstshapewipe.so
%{_libdir}/gstreamer-%{majorminor}/libgstvideofilter.so
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 74d4d5d..516eda9 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -225,7 +225,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/alpha/Makefile.in b/gst/alpha/Makefile.in
index 6da2875..5d567d5 100644
--- a/gst/alpha/Makefile.in
+++ b/gst/alpha/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -257,7 +257,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/apetag/Makefile.in b/gst/apetag/Makefile.in
index 2234f28..2951e2a 100644
--- a/gst/apetag/Makefile.in
+++ b/gst/apetag/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/audiofx/Makefile.in b/gst/audiofx/Makefile.in
index 402d35d..e662eb4 100644
--- a/gst/audiofx/Makefile.in
+++ b/gst/audiofx/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -266,7 +266,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/audiofx/audiopanorama.c b/gst/audiofx/audiopanorama.c
index 3d0d68f..e257c36 100644
--- a/gst/audiofx/audiopanorama.c
+++ b/gst/audiofx/audiopanorama.c
@@ -334,9 +334,11 @@
if (direction == GST_PAD_SRC) {
GST_INFO ("allow 1-2 channels");
gst_structure_set (structure, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
+ gst_structure_remove_field (structure, "channel-mask");
} else {
GST_INFO ("allow 2 channels");
gst_structure_set (structure, "channels", G_TYPE_INT, 2, NULL);
+ gst_structure_remove_field (structure, "channel-mask");
}
return res;
diff --git a/gst/audioparsers/Makefile.in b/gst/audioparsers/Makefile.in
index 12d86c4..b7afca0 100644
--- a/gst/audioparsers/Makefile.in
+++ b/gst/audioparsers/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -255,7 +255,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/audioparsers/gstaacparse.c b/gst/audioparsers/gstaacparse.c
index f56b3e8..9ffe7c5 100644
--- a/gst/audioparsers/gstaacparse.c
+++ b/gst/audioparsers/gstaacparse.c
@@ -271,6 +271,9 @@
gst_structure_get_int (structure, "rate", &aacparse->sample_rate);
gst_structure_get_int (structure, "channels", &aacparse->channels);
} else {
+ aacparse->sample_rate = 0;
+ aacparse->channels = 0;
+ aacparse->header_type = DSPAAC_HEADER_NOT_PARSED;
gst_base_parse_set_passthrough (parse, FALSE);
}
@@ -720,7 +723,7 @@
if (((data[i] == 0xff) && ((data[i + 1] & 0xf6) == 0xf0)) ||
((data[0] == 0x56) && ((data[1] & 0xe0) == 0xe0)) ||
strncmp ((char *) data + i, "ADIF", 4) == 0) {
- GST_DEBUG_OBJECT (aacparse, "Found ADIF signature at offset %u", i);
+ GST_DEBUG_OBJECT (aacparse, "Found signature at offset %u", i);
found = TRUE;
if (i) {
@@ -745,10 +748,15 @@
GST_INFO ("ADTS ID: %d, framesize: %d", (data[1] & 0x08) >> 3, *framesize);
- aacparse->header_type = DSPAAC_HEADER_ADTS;
gst_aac_parse_parse_adts_header (aacparse, data, &rate, &channels,
&aacparse->object_type, &aacparse->mpegversion);
+ if (!channels || !framesize) {
+ GST_DEBUG_OBJECT (aacparse, "impossible ADTS configuration");
+ return FALSE;
+ }
+
+ aacparse->header_type = DSPAAC_HEADER_ADTS;
gst_base_parse_set_frame_rate (GST_BASE_PARSE (aacparse), rate,
aacparse->frame_samples, 2, 2);
@@ -987,8 +995,6 @@
aacparse->sample_rate = rate;
aacparse->channels = channels;
- GST_DEBUG_OBJECT (aacparse, "here");
-
if (!gst_aac_parse_set_src_caps (aacparse, NULL)) {
/* If linking fails, we need to return appropriate error */
ret = GST_FLOW_NOT_LINKED;
diff --git a/gst/audioparsers/gstflacparse.c b/gst/audioparsers/gstflacparse.c
index 18978ff..ff5a359 100644
--- a/gst/audioparsers/gstflacparse.c
+++ b/gst/audioparsers/gstflacparse.c
@@ -184,6 +184,9 @@
GST_STATIC_CAPS ("audio/x-flac")
);
+static GstBuffer *gst_flac_parse_generate_vorbiscomment (GstFlacParse *
+ flacparse);
+
static void gst_flac_parse_finalize (GObject * object);
static void gst_flac_parse_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
@@ -292,9 +295,13 @@
GstFlacParse *flacparse = GST_FLAC_PARSE (object);
if (flacparse->tags) {
- gst_tag_list_free (flacparse->tags);
+ gst_tag_list_unref (flacparse->tags);
flacparse->tags = NULL;
}
+ if (flacparse->toc) {
+ gst_toc_unref (flacparse->toc);
+ flacparse->toc = NULL;
+ }
g_list_foreach (flacparse->headers, (GFunc) gst_mini_object_unref, NULL);
g_list_free (flacparse->headers);
@@ -343,9 +350,13 @@
GstFlacParse *flacparse = GST_FLAC_PARSE (parse);
if (flacparse->tags) {
- gst_tag_list_free (flacparse->tags);
+ gst_tag_list_unref (flacparse->tags);
flacparse->tags = NULL;
}
+ if (flacparse->toc) {
+ gst_toc_unref (flacparse->toc);
+ flacparse->toc = NULL;
+ }
g_list_foreach (flacparse->headers, (GFunc) gst_mini_object_unref, NULL);
g_list_free (flacparse->headers);
@@ -549,6 +560,16 @@
}
}
+ /* documentation says:
+ * The "blocking strategy" bit must be the same throughout the entire stream. */
+ if (flacparse->blocking_strategy != blocking_strategy) {
+ if (flacparse->block_size != 0) {
+ GST_WARNING_OBJECT (flacparse, "blocking strategy is not constant");
+ if (suspect)
+ *suspect = TRUE;
+ }
+ }
+
/*
The FLAC format documentation says:
The "blocking strategy" bit determines how to calculate the sample number
@@ -952,7 +973,7 @@
if (flacparse->tags == NULL) {
GST_ERROR_OBJECT (flacparse, "Invalid vorbiscomment block");
} else if (gst_tag_list_is_empty (flacparse->tags)) {
- gst_tag_list_free (flacparse->tags);
+ gst_tag_list_unref (flacparse->tags);
flacparse->tags = NULL;
}
@@ -960,6 +981,114 @@
}
static gboolean
+gst_flac_parse_handle_cuesheet (GstFlacParse * flacparse, GstBuffer * buffer)
+{
+ GstByteReader reader;
+ GstMapInfo map;
+ guint i, j;
+ guint8 n_tracks, track_num, index;
+ guint64 offset;
+ gint64 start, stop;
+ gchar *id;
+ gchar isrc[13];
+ GstTagList *tags;
+ GstToc *toc;
+ GstTocEntry *cur_entry = NULL, *prev_entry = NULL;
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ gst_byte_reader_init (&reader, map.data, map.size);
+
+ toc = gst_toc_new (GST_TOC_SCOPE_GLOBAL);
+
+ /* skip 4 bytes METADATA_BLOCK_HEADER */
+ /* http://flac.sourceforge.net/format.html#metadata_block_header */
+ if (!gst_byte_reader_skip (&reader, 4))
+ goto error;
+
+ /* skip 395 bytes from METADATA_BLOCK_CUESHEET */
+ /* http://flac.sourceforge.net/format.html#metadata_block_cuesheet */
+ if (!gst_byte_reader_skip (&reader, 395))
+ goto error;
+
+ if (!gst_byte_reader_get_uint8 (&reader, &n_tracks))
+ goto error;
+
+ /* CUESHEET_TRACK */
+ /* http://flac.sourceforge.net/format.html#cuesheet_track */
+ for (i = 0; i < n_tracks; i++) {
+ if (!gst_byte_reader_get_uint64_be (&reader, &offset))
+ goto error;
+ if (!gst_byte_reader_get_uint8 (&reader, &track_num))
+ goto error;
+
+ if (gst_byte_reader_get_remaining (&reader) < 12)
+ goto error;
+ memcpy (isrc, map.data + gst_byte_reader_get_pos (&reader), 12);
+ /* \0-terminate the string */
+ isrc[12] = '\0';
+ if (!gst_byte_reader_skip (&reader, 12))
+ goto error;
+
+ /* skip 14 bytes from CUESHEET_TRACK */
+ if (!gst_byte_reader_skip (&reader, 14))
+ goto error;
+ if (!gst_byte_reader_get_uint8 (&reader, &index))
+ goto error;
+ /* add tracks in TOC */
+ /* lead-out tack has number 170 or 255 */
+ if (track_num != 170 && track_num != 255) {
+ prev_entry = cur_entry;
+ /* previous track stop time = current track start time */
+ if (prev_entry != NULL) {
+ gst_toc_entry_get_start_stop_times (prev_entry, &start, NULL);
+ stop =
+ gst_util_uint64_scale_round (offset, GST_SECOND,
+ flacparse->samplerate);
+ gst_toc_entry_set_start_stop_times (prev_entry, start, stop);
+ }
+ id = g_strdup_printf ("%08x", track_num);
+ cur_entry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_TRACK, id);
+ g_free (id);
+ start =
+ gst_util_uint64_scale_round (offset, GST_SECOND,
+ flacparse->samplerate);
+ gst_toc_entry_set_start_stop_times (cur_entry, start, -1);
+ /* add ISRC as tag in track */
+ if (strlen (isrc) != 0) {
+ tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ISRC, isrc, NULL);
+ gst_toc_entry_set_tags (cur_entry, tags);
+ }
+ gst_toc_append_entry (toc, cur_entry);
+ /* CUESHEET_TRACK_INDEX */
+ /* http://flac.sourceforge.net/format.html#cuesheet_track_index */
+ for (j = 0; j < index; j++) {
+ if (!gst_byte_reader_skip (&reader, 12))
+ goto error;
+ }
+ } else {
+ /* set stop time in last track */
+ stop =
+ gst_util_uint64_scale_round (offset, GST_SECOND,
+ flacparse->samplerate);
+ gst_toc_entry_set_start_stop_times (cur_entry, start, stop);
+ }
+ }
+
+ /* send data as TOC */
+ if (!flacparse->toc)
+ flacparse->toc = toc;
+
+ gst_buffer_unmap (buffer, &map);
+ return TRUE;
+
+error:
+ GST_ERROR_OBJECT (flacparse, "Error reading data");
+ gst_buffer_unmap (buffer, &map);
+ return FALSE;
+}
+
+static gboolean
gst_flac_parse_handle_picture (GstFlacParse * flacparse, GstBuffer * buffer)
{
GstByteReader reader;
@@ -999,7 +1128,7 @@
map.data + gst_byte_reader_get_pos (&reader), img_len, img_type);
if (gst_tag_list_is_empty (flacparse->tags)) {
- gst_tag_list_free (flacparse->tags);
+ gst_tag_list_unref (flacparse->tags);
flacparse->tags = NULL;
}
@@ -1125,6 +1254,16 @@
gst_buffer_unmap (header, &map);
}
+ /* at least this one we can generate easily
+ * to provide full headers downstream */
+ if (vorbiscomment == NULL && streaminfo != NULL) {
+ GST_DEBUG_OBJECT (flacparse,
+ "missing vorbiscomment header; generating dummy");
+ vorbiscomment = gst_flac_parse_generate_vorbiscomment (flacparse);
+ flacparse->headers = g_list_insert (flacparse->headers, vorbiscomment,
+ g_list_index (flacparse->headers, streaminfo) + 1);
+ }
+
if (marker == NULL || streaminfo == NULL || vorbiscomment == NULL) {
GST_WARNING_OBJECT (flacparse,
"missing header %p %p %p, muxing into container "
@@ -1213,10 +1352,56 @@
return res;
}
+/* empty vorbiscomment */
+static GstBuffer *
+gst_flac_parse_generate_vorbiscomment (GstFlacParse * flacparse)
+{
+ GstTagList *taglist = gst_tag_list_new_empty ();
+ guchar header[4];
+ guint size;
+ GstBuffer *vorbiscomment;
+ GstMapInfo map;
+
+ header[0] = 0x84; /* is_last = 1; type = 4; */
+
+ vorbiscomment =
+ gst_tag_list_to_vorbiscomment_buffer (taglist, header,
+ sizeof (header), NULL);
+ gst_tag_list_unref (taglist);
+
+ gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
+
+ /* Get rid of framing bit */
+ if (map.data[map.size - 1] == 1) {
+ GstBuffer *sub;
+
+ sub =
+ gst_buffer_copy_region (vorbiscomment, GST_BUFFER_COPY_ALL, 0,
+ map.size - 1);
+ gst_buffer_unmap (vorbiscomment, &map);
+ gst_buffer_unref (vorbiscomment);
+ vorbiscomment = sub;
+ gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
+ }
+
+ size = map.size - 4;
+ map.data[1] = ((size & 0xFF0000) >> 16);
+ map.data[2] = ((size & 0x00FF00) >> 8);
+ map.data[3] = (size & 0x0000FF);
+ gst_buffer_unmap (vorbiscomment, &map);
+
+ GST_BUFFER_TIMESTAMP (vorbiscomment) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_DURATION (vorbiscomment) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_OFFSET (vorbiscomment) = 0;
+ GST_BUFFER_OFFSET_END (vorbiscomment) = 0;
+
+ return vorbiscomment;
+}
+
static gboolean
gst_flac_parse_generate_headers (GstFlacParse * flacparse)
{
- GstBuffer *marker, *streaminfo, *vorbiscomment;
+ GstBuffer *marker, *streaminfo;
GstMapInfo map;
marker = gst_buffer_new_and_alloc (4);
@@ -1285,46 +1470,8 @@
GST_BUFFER_OFFSET_END (streaminfo) = 0;
flacparse->headers = g_list_append (flacparse->headers, streaminfo);
- /* empty vorbiscomment */
- {
- GstTagList *taglist = gst_tag_list_new_empty ();
- guchar header[4];
- guint size;
-
- header[0] = 0x84; /* is_last = 1; type = 4; */
-
- vorbiscomment =
- gst_tag_list_to_vorbiscomment_buffer (taglist, header,
- sizeof (header), NULL);
- gst_tag_list_free (taglist);
-
- gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
-
- /* Get rid of framing bit */
- if (map.data[map.size - 1] == 1) {
- GstBuffer *sub;
-
- sub =
- gst_buffer_copy_region (vorbiscomment, GST_BUFFER_COPY_ALL, 0,
- map.size - 1);
- gst_buffer_unmap (vorbiscomment, &map);
- gst_buffer_unref (vorbiscomment);
- vorbiscomment = sub;
- gst_buffer_map (vorbiscomment, &map, GST_MAP_WRITE);
- }
-
- size = map.size - 4;
- map.data[1] = ((size & 0xFF0000) >> 16);
- map.data[2] = ((size & 0x00FF00) >> 8);
- map.data[3] = (size & 0x0000FF);
- gst_buffer_unmap (vorbiscomment, &map);
-
- GST_BUFFER_TIMESTAMP (vorbiscomment) = GST_CLOCK_TIME_NONE;
- GST_BUFFER_DURATION (vorbiscomment) = GST_CLOCK_TIME_NONE;
- GST_BUFFER_OFFSET (vorbiscomment) = 0;
- GST_BUFFER_OFFSET_END (vorbiscomment) = 0;
- flacparse->headers = g_list_append (flacparse->headers, vorbiscomment);
- }
+ flacparse->headers = g_list_append (flacparse->headers,
+ gst_flac_parse_generate_vorbiscomment (flacparse));
return TRUE;
}
@@ -1381,13 +1528,16 @@
if (!gst_flac_parse_handle_vorbiscomment (flacparse, sbuffer))
goto cleanup;
break;
+ case 5: /* CUESHEET */
+ if (!gst_flac_parse_handle_cuesheet (flacparse, sbuffer))
+ goto cleanup;
+ break;
case 6: /* PICTURE */
if (!gst_flac_parse_handle_picture (flacparse, sbuffer))
goto cleanup;
break;
case 1: /* PADDING */
case 2: /* APPLICATION */
- case 5: /* CUESHEET */
default: /* RESERVED */
break;
}
@@ -1503,9 +1653,15 @@
/* Push tags */
if (flacparse->tags) {
gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (flacparse),
- gst_event_new_tag ("GstParser", flacparse->tags));
+ gst_event_new_tag (flacparse->tags));
flacparse->tags = NULL;
}
+ /* Push toc */
+ if (flacparse->toc) {
+ gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (flacparse),
+ gst_event_new_toc (flacparse->toc, FALSE));
+ flacparse->toc = NULL;
+ }
frame->flags |= GST_BASE_PARSE_FRAME_FLAG_CLIP;
diff --git a/gst/audioparsers/gstflacparse.h b/gst/audioparsers/gstflacparse.h
index ebdc1b9..bba0212 100644
--- a/gst/audioparsers/gstflacparse.h
+++ b/gst/audioparsers/gstflacparse.h
@@ -77,6 +77,7 @@
gboolean strategy_checked;
GstTagList *tags;
+ GstToc *toc;
GList *headers;
GstBuffer *seektable;
diff --git a/gst/audioparsers/gstmpegaudioparse.c b/gst/audioparsers/gstmpegaudioparse.c
index bd35117..03be438 100644
--- a/gst/audioparsers/gstmpegaudioparse.c
+++ b/gst/audioparsers/gstmpegaudioparse.c
@@ -1350,7 +1350,7 @@
GST_TAG_NOMINAL_BITRATE, mp3parse->hdr_bitrate, NULL);
}
gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (mp3parse),
- gst_event_new_tag ("GstParser", taglist));
+ gst_event_new_tag (taglist));
g_free (codec);
/* also signals the end of first-frame processing */
@@ -1389,7 +1389,7 @@
/* if the taglist exists, we need to send it */
if (taglist) {
gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (mp3parse),
- gst_event_new_tag ("GstParser", taglist));
+ gst_event_new_tag (taglist));
}
/* usual clipping applies */
diff --git a/gst/audioparsers/gstwavpackparse.c b/gst/audioparsers/gstwavpackparse.c
index e11f82a..a4e49a5 100644
--- a/gst/audioparsers/gstwavpackparse.c
+++ b/gst/audioparsers/gstwavpackparse.c
@@ -565,7 +565,7 @@
if (!gst_wavpack_get_channel_positions (chans, mask, pos)) {
GST_WARNING_OBJECT (wvparse, "Failed to determine channel layout");
} else {
- gst_audio_channel_positions_to_mask (pos, chans, &gmask);
+ gst_audio_channel_positions_to_mask (pos, chans, FALSE, &gmask);
if (gmask)
gst_caps_set_simple (caps,
"channel-mask", GST_TYPE_BITMASK, gmask, NULL);
diff --git a/gst/auparse/Makefile.in b/gst/auparse/Makefile.in
index a152575..e72fb22 100644
--- a/gst/auparse/Makefile.in
+++ b/gst/auparse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/autodetect/Makefile.in b/gst/autodetect/Makefile.in
index 42164e4..5a192b6 100644
--- a/gst/autodetect/Makefile.in
+++ b/gst/autodetect/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/autodetect/gstautoaudiosink.c b/gst/autodetect/gstautoaudiosink.c
index 594f45a..bfb25a8 100644
--- a/gst/autodetect/gstautoaudiosink.c
+++ b/gst/autodetect/gstautoaudiosink.c
@@ -44,11 +44,14 @@
#include "gstautoaudiosink.h"
#include "gstautodetect.h"
+#define DEFAULT_TS_OFFSET 0
+
/* Properties */
enum
{
PROP_0,
PROP_CAPS,
+ PROP_TS_OFFSET,
};
static GstStateChangeReturn
@@ -100,6 +103,11 @@
"Filter sink candidates using these caps.", GST_TYPE_CAPS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+ g_param_spec_int64 ("ts-offset", "TS Offset",
+ "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64,
+ DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (eklass,
gst_static_pad_template_get (&sink_template));
@@ -166,6 +174,7 @@
/* set the default raw audio caps */
sink->filter_caps = gst_static_caps_get (&raw_caps);
+ sink->ts_offset = DEFAULT_TS_OFFSET;
/* mark as sink */
GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK);
@@ -336,6 +345,8 @@
if (!(esink = gst_auto_audio_sink_find_best (sink)))
goto no_sink;
+ g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL);
+
sink->kid = esink;
/* Ensure the child is brought up to the right state to match the parent
* although it's currently always in READY and
@@ -415,6 +426,11 @@
gst_caps_unref (sink->filter_caps);
sink->filter_caps = gst_caps_copy (gst_value_get_caps (value));
break;
+ case PROP_TS_OFFSET:
+ sink->ts_offset = g_value_get_int64 (value);
+ if (sink->kid)
+ g_object_set_property (G_OBJECT (sink->kid), pspec->name, value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -432,6 +448,9 @@
gst_value_set_caps (value, sink->filter_caps);
break;
}
+ case PROP_TS_OFFSET:
+ g_value_set_int64 (value, sink->ts_offset);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/autodetect/gstautoaudiosink.h b/gst/autodetect/gstautoaudiosink.h
index 2e5085f..40fae5c 100644
--- a/gst/autodetect/gstautoaudiosink.h
+++ b/gst/autodetect/gstautoaudiosink.h
@@ -44,6 +44,7 @@
GstPad *pad;
GstElement *kid;
GstCaps *filter_caps;
+ GstClockTimeDiff ts_offset;
} GstAutoAudioSink;
typedef struct _GstAutoAudioSinkClass {
diff --git a/gst/autodetect/gstautovideosink.c b/gst/autodetect/gstautovideosink.c
index 6c24c3b..272671a 100644
--- a/gst/autodetect/gstautovideosink.c
+++ b/gst/autodetect/gstautovideosink.c
@@ -44,11 +44,14 @@
#include "gstautovideosink.h"
#include "gstautodetect.h"
+#define DEFAULT_TS_OFFSET 0
+
/* Properties */
enum
{
PROP_0,
PROP_CAPS,
+ PROP_TS_OFFSET,
};
static GstStateChangeReturn
@@ -98,6 +101,11 @@
"Filter sink candidates using these caps.", GST_TYPE_CAPS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_TS_OFFSET,
+ g_param_spec_int64 ("ts-offset", "TS Offset",
+ "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64,
+ DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (eklass,
gst_static_pad_template_get (&sink_template));
gst_element_class_set_static_metadata (eklass, "Auto video sink",
@@ -165,6 +173,7 @@
/* set the default raw video caps */
sink->filter_caps = gst_static_caps_get (&raw_caps);
+ sink->ts_offset = DEFAULT_TS_OFFSET;
/* mark as sink */
GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_SINK);
@@ -332,6 +341,8 @@
if (!(esink = gst_auto_video_sink_find_best (sink)))
goto no_sink;
+ g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL);
+
sink->kid = esink;
gst_bin_add (GST_BIN (sink), esink);
@@ -403,6 +414,11 @@
gst_caps_unref (sink->filter_caps);
sink->filter_caps = gst_caps_copy (gst_value_get_caps (value));
break;
+ case PROP_TS_OFFSET:
+ sink->ts_offset = g_value_get_int64 (value);
+ if (sink->kid)
+ g_object_set_property (G_OBJECT (sink->kid), pspec->name, value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -420,6 +436,9 @@
gst_value_set_caps (value, sink->filter_caps);
break;
}
+ case PROP_TS_OFFSET:
+ g_value_set_int64 (value, sink->ts_offset);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/autodetect/gstautovideosink.h b/gst/autodetect/gstautovideosink.h
index 9aece2b..1ec4a26 100644
--- a/gst/autodetect/gstautovideosink.h
+++ b/gst/autodetect/gstautovideosink.h
@@ -44,6 +44,7 @@
GstPad *pad;
GstElement *kid;
GstCaps *filter_caps;
+ GstClockTimeDiff ts_offset;
} GstAutoVideoSink;
typedef struct _GstAutoVideoSinkClass {
diff --git a/gst/avi/Makefile.in b/gst/avi/Makefile.in
index 01ac3fe..e136668 100644
--- a/gst/avi/Makefile.in
+++ b/gst/avi/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index dddec00..6087b3b 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -231,7 +231,7 @@
gst_object_unref (stream->pad);
}
if (stream->taglist) {
- gst_tag_list_free (stream->taglist);
+ gst_tag_list_unref (stream->taglist);
stream->taglist = NULL;
}
memset (stream, 0, sizeof (GstAviStream));
@@ -278,7 +278,7 @@
}
if (avi->globaltags)
- gst_tag_list_free (avi->globaltags);
+ gst_tag_list_unref (avi->globaltags);
avi->globaltags = NULL;
avi->got_tags = TRUE; /* we always want to push global tags */
@@ -1924,6 +1924,7 @@
GstElement *element;
gboolean got_strh = FALSE, got_strf = FALSE, got_vprp = FALSE;
gst_riff_vprp *vprp = NULL;
+ gchar *stream_id;
element = GST_ELEMENT_CAST (avi);
@@ -2299,7 +2300,12 @@
avi->num_streams++;
gst_pad_set_active (pad, TRUE);
- gst_pad_push_event (pad, gst_event_new_caps (caps));
+ stream_id =
+ gst_pad_create_stream_id_printf (pad, GST_ELEMENT_CAST (avi), "%u",
+ avi->num_streams);
+ gst_pad_push_event (pad, gst_event_new_stream_start (stream_id));
+ g_free (stream_id);
+ gst_pad_set_caps (pad, caps);
gst_caps_unref (caps);
/* make tags */
@@ -3227,8 +3233,8 @@
case GST_RIFF_TAG_JUNQ:
case GST_RIFF_TAG_JUNK:
goto next;
- break;
}
+ break;
case GST_RIFF_IDIT:
gst_avi_demux_parse_idit (avi, sub);
goto next;
@@ -4177,7 +4183,7 @@
if (!avi->streaming) {
gst_pad_start_task (avi->sinkpad, (GstTaskFunction) gst_avi_demux_loop,
- avi->sinkpad);
+ avi->sinkpad, NULL);
}
/* reset the last flow and mark discont, seek is always DISCONT */
for (i = 0; i < avi->num_streams; i++) {
@@ -4443,10 +4449,9 @@
#define gst_avi_demux_is_uncompressed(fourcc) \
- (fourcc && \
- (fourcc == GST_RIFF_DIB || \
- fourcc == GST_RIFF_rgb || \
- fourcc == GST_RIFF_RGB || fourcc == GST_RIFF_RAW))
+ (fourcc == GST_RIFF_DIB || \
+ fourcc == GST_RIFF_rgb || \
+ fourcc == GST_RIFF_RGB || fourcc == GST_RIFF_RAW)
/*
* Invert DIB buffers... Takes existing buffer and
@@ -4463,11 +4468,19 @@
guint8 *tmp = NULL;
GstMapInfo map;
GstCaps *caps;
+ guint32 fourcc;
if (stream->strh->type != GST_RIFF_FCC_vids)
return buf;
- if (!gst_avi_demux_is_uncompressed (stream->strh->fcc_handler)) {
+ if (stream->strf.vids == NULL) {
+ GST_WARNING ("Failed to retrieve vids for stream");
+ return buf;
+ }
+
+ fourcc = (stream->strf.vids->compression) ?
+ stream->strf.vids->compression : stream->strh->fcc_handler;
+ if (!gst_avi_demux_is_uncompressed (fourcc)) {
return buf; /* Ignore non DIB buffers */
}
@@ -4480,11 +4493,6 @@
return buf;
}
- if (stream->strf.vids == NULL) {
- GST_WARNING ("Failed to retrieve vids for stream");
- return buf;
- }
-
h = stream->strf.vids->height;
w = stream->strf.vids->width;
stride = GST_ROUND_UP_4 (w * (bpp / 8));
@@ -5119,7 +5127,7 @@
if (pad && tags) {
GST_DEBUG_OBJECT (pad, "Tags: %" GST_PTR_FORMAT, tags);
- gst_pad_push_event (pad, gst_event_new_tag ("GstDemuxer", tags));
+ gst_pad_push_event (pad, gst_event_new_tag (tags));
stream->taglist = NULL;
}
}
@@ -5131,7 +5139,8 @@
GST_TAG_CONTAINER_FORMAT, "AVI", NULL);
GST_DEBUG_OBJECT (avi, "Global tags: %" GST_PTR_FORMAT, tags);
- gst_avi_demux_push_event (avi, gst_event_new_tag ("GstDemuxer", tags));
+ gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+ gst_avi_demux_push_event (avi, gst_event_new_tag (tags));
avi->globaltags = NULL;
avi->got_tags = FALSE;
}
@@ -5212,6 +5221,8 @@
(GST_ELEMENT_CAST (avi),
gst_message_new_segment_done (GST_OBJECT_CAST (avi),
GST_FORMAT_TIME, stop));
+ gst_avi_demux_push_event (avi,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
} else {
push_eos = TRUE;
}
@@ -5389,7 +5400,7 @@
if (active) {
avi->streaming = FALSE;
res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_avi_demux_loop,
- sinkpad);
+ sinkpad, NULL);
} else {
res = gst_pad_stop_task (sinkpad);
}
diff --git a/gst/avi/gstavimux.c b/gst/avi/gstavimux.c
index 1e699c8..10efaab 100644
--- a/gst/avi/gstavimux.c
+++ b/gst/avi/gstavimux.c
@@ -354,7 +354,7 @@
avimux->codec_data_size = 0;
if (avimux->tags_snap) {
- gst_tag_list_free (avimux->tags_snap);
+ gst_tag_list_unref (avimux->tags_snap);
avimux->tags_snap = NULL;
}
@@ -769,11 +769,11 @@
switch (fmt) {
case GST_AUDIO_FORMAT_U8:
avipad->auds.blockalign = 8;
- avipad->auds.size = 8;
+ avipad->auds.bits_per_sample = 8;
break;
case GST_AUDIO_FORMAT_S16:
avipad->auds.blockalign = 16;
- avipad->auds.size = 16;
+ avipad->auds.bits_per_sample = 16;
break;
default:
goto refuse_caps;
@@ -789,7 +789,7 @@
/* set some defaults */
avipad->auds.blockalign = 1;
avipad->auds.av_bps = 0;
- avipad->auds.size = 16;
+ avipad->auds.bits_per_sample = 16;
if (!strcmp (mimetype, "audio/mpeg")) {
gint mpegversion;
@@ -859,12 +859,12 @@
avipad->auds.format = GST_RIFF_WAVE_FORMAT_A52;
} else if (!strcmp (mimetype, "audio/x-alaw")) {
avipad->auds.format = GST_RIFF_WAVE_FORMAT_ALAW;
- avipad->auds.size = 8;
+ avipad->auds.bits_per_sample = 8;
avipad->auds.blockalign = avipad->auds.channels;
avipad->auds.av_bps = avipad->auds.blockalign * avipad->auds.rate;
} else if (!strcmp (mimetype, "audio/x-mulaw")) {
avipad->auds.format = GST_RIFF_WAVE_FORMAT_MULAW;
- avipad->auds.size = 8;
+ avipad->auds.bits_per_sample = 8;
avipad->auds.blockalign = avipad->auds.channels;
avipad->auds.av_bps = avipad->auds.blockalign * avipad->auds.rate;
} else if (!strcmp (mimetype, "audio/x-wma")) {
@@ -1298,7 +1298,7 @@
hdl &= gst_byte_writer_put_uint32_le (&bw, audpad->auds.rate);
hdl &= gst_byte_writer_put_uint32_le (&bw, audpad->auds.av_bps);
hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.blockalign);
- hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.size);
+ hdl &= gst_byte_writer_put_uint16_le (&bw, audpad->auds.bits_per_sample);
hdl &= gst_byte_writer_put_uint16_le (&bw, codec_size);
if (audpad->auds_codec_data) {
gst_buffer_map (audpad->auds_codec_data, &map, GST_MAP_READ);
diff --git a/gst/avi/gstavisubtitle.c b/gst/avi/gstavisubtitle.c
index a404011..80f0668 100644
--- a/gst/avi/gstavisubtitle.c
+++ b/gst/avi/gstavisubtitle.c
@@ -177,8 +177,7 @@
gst_avi_subtitle_title_tag (GstAviSubtitle * sub, gchar * title)
{
gst_pad_push_event (sub->src,
- gst_event_new_tag ("GstParser", gst_tag_list_new (GST_TAG_TITLE, title,
- NULL)));
+ gst_event_new_tag (gst_tag_list_new (GST_TAG_TITLE, title, NULL)));
}
static GstFlowReturn
diff --git a/gst/cutter/Makefile.in b/gst/cutter/Makefile.in
index 970a316..52c61a0 100644
--- a/gst/cutter/Makefile.in
+++ b/gst/cutter/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index cea61dc..747b874 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -264,7 +264,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/debugutils/gstpushfilesrc.c b/gst/debugutils/gstpushfilesrc.c
index 3ccd7a6..34ab7d5 100644
--- a/gst/debugutils/gstpushfilesrc.c
+++ b/gst/debugutils/gstpushfilesrc.c
@@ -114,7 +114,7 @@
res = TRUE;
break;
default:
- res = gst_proxy_pad_query_default (pad, parent, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
return res;
diff --git a/gst/debugutils/gsttaginject.c b/gst/debugutils/gsttaginject.c
index 8decf6a..564c1bf 100644
--- a/gst/debugutils/gsttaginject.c
+++ b/gst/debugutils/gsttaginject.c
@@ -82,7 +82,7 @@
GstTagInject *self = GST_TAG_INJECT (object);
if (self->tags) {
- gst_tag_list_free (self->tags);
+ gst_tag_list_unref (self->tags);
self->tags = NULL;
}
@@ -148,7 +148,7 @@
if (self->tags && !gst_tag_list_is_empty (self->tags)) {
GST_DEBUG ("tag event :%" GST_PTR_FORMAT, self->tags);
gst_pad_push_event (GST_BASE_TRANSFORM_SRC_PAD (trans),
- gst_event_new_tag ("GstTagInject", gst_tag_list_copy (self->tags)));
+ gst_event_new_tag (gst_tag_list_ref (self->tags)));
}
}
diff --git a/gst/debugutils/rndbuffersize.c b/gst/debugutils/rndbuffersize.c
index 8122212..243b1c7 100644
--- a/gst/debugutils/rndbuffersize.c
+++ b/gst/debugutils/rndbuffersize.c
@@ -27,6 +27,7 @@
#endif
#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
GST_DEBUG_CATEGORY_STATIC (gst_rnd_buffer_size_debug);
#define GST_CAT_DEFAULT gst_rnd_buffer_size_debug
@@ -46,13 +47,15 @@
/*< private > */
GRand *rand;
- gulong seed;
- glong min, max;
+ guint seed;
+ gint min, max;
GstPad *sinkpad, *srcpad;
guint64 offset;
gboolean need_newsegment;
+
+ GstAdapter *adapter;
};
struct _GstRndBufferSizeClass
@@ -95,6 +98,10 @@
element, GstStateChange transition);
static gboolean gst_rnd_buffer_size_src_event (GstPad * pad,
GstObject * parent, GstEvent * event);
+static gboolean gst_rnd_buffer_size_sink_event (GstPad * pad,
+ GstObject * parent, GstEvent * event);
+static GstFlowReturn gst_rnd_buffer_size_chain (GstPad * pad,
+ GstObject * parent, GstBuffer * buffer);
GType gst_rnd_buffer_size_get_type (void);
#define gst_rnd_buffer_size_parent_class parent_class
@@ -125,20 +132,17 @@
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_change_state);
- /* FIXME 0.11: these should all be int instead of long, to avoid bugs
- * when passing these as varargs with g_object_set(), and there was no
- * reason to use long in the first place here */
g_object_class_install_property (gobject_class, ARG_SEED,
- g_param_spec_ulong ("seed", "random number seed",
+ g_param_spec_uint ("seed", "random number seed",
"seed for randomness (initialized when going from READY to PAUSED)",
0, G_MAXUINT32, DEFAULT_SEED,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, ARG_MINIMUM,
- g_param_spec_long ("min", "mininum", "mininum buffer size",
+ g_param_spec_int ("min", "mininum", "mininum buffer size",
0, G_MAXINT32, DEFAULT_MIN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, ARG_MAXIMUM,
- g_param_spec_long ("max", "maximum", "maximum buffer size",
+ g_param_spec_int ("max", "maximum", "maximum buffer size",
1, G_MAXINT32, DEFAULT_MAX,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
}
@@ -151,6 +155,10 @@
GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_activate));
gst_pad_set_activatemode_function (self->sinkpad,
GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_activate_mode));
+ gst_pad_set_event_function (self->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_sink_event));
+ gst_pad_set_chain_function (self->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_rnd_buffer_size_chain));
gst_element_add_pad (GST_ELEMENT (self), self->sinkpad);
self->srcpad = gst_pad_new_from_static_template (&src_template, "src");
@@ -182,13 +190,13 @@
switch (prop_id) {
case ARG_SEED:
- self->seed = g_value_get_ulong (value);
+ self->seed = g_value_get_uint (value);
break;
case ARG_MINIMUM:
- self->min = g_value_get_long (value);
+ self->min = g_value_get_int (value);
break;
case ARG_MAXIMUM:
- self->max = g_value_get_long (value);
+ self->max = g_value_get_int (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -205,13 +213,13 @@
switch (prop_id) {
case ARG_SEED:
- g_value_set_ulong (value, self->seed);
+ g_value_set_uint (value, self->seed);
break;
case ARG_MINIMUM:
- g_value_set_long (value, self->min);
+ g_value_set_int (value, self->min);
break;
case ARG_MAXIMUM:
- g_value_set_long (value, self->max);
+ g_value_set_int (value, self->max);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -228,25 +236,19 @@
query = gst_query_new_scheduling ();
- if (!gst_pad_peer_query (pad, query)) {
- gst_query_unref (query);
- goto no_pull;
- }
+ if (gst_pad_peer_query (pad, query))
+ pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+ else
+ pull_mode = FALSE;
- pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
gst_query_unref (query);
- if (!pull_mode)
- goto no_pull;
-
- GST_DEBUG_OBJECT (pad, "activating pull");
- return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
-
- /* ERRORS */
-no_pull:
- {
- GST_DEBUG_OBJECT (pad, "pull mode not supported");
- return FALSE;
+ if (pull_mode) {
+ GST_DEBUG_OBJECT (pad, "activating pull");
+ return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
+ } else {
+ GST_DEBUG_OBJECT (pad, "activating push");
+ return gst_pad_activate_mode (pad, GST_PAD_MODE_PUSH, TRUE);
}
}
@@ -264,13 +266,17 @@
GST_INFO_OBJECT (self, "starting pull");
res =
gst_pad_start_task (pad, (GstTaskFunction) gst_rnd_buffer_size_loop,
- self);
+ self, NULL);
self->need_newsegment = TRUE;
} else {
GST_INFO_OBJECT (self, "stopping pull");
res = gst_pad_stop_task (pad);
}
break;
+ case GST_PAD_MODE_PUSH:
+ GST_INFO_OBJECT (self, "%sactivating in push mode", (active) ? "" : "de");
+ res = TRUE;
+ break;
default:
res = FALSE;
break;
@@ -326,12 +332,112 @@
self->need_newsegment = TRUE;
gst_pad_start_task (self->sinkpad, (GstTaskFunction) gst_rnd_buffer_size_loop,
- self);
+ self, NULL);
GST_PAD_STREAM_UNLOCK (self->sinkpad);
return TRUE;
}
+static GstFlowReturn
+gst_rnd_buffer_size_drain_adapter (GstRndBufferSize * self, gboolean eos)
+{
+ GstFlowReturn flow;
+ GstBuffer *buf;
+ guint num_bytes, avail;
+
+ flow = GST_FLOW_OK;
+
+ if (G_UNLIKELY (self->min > self->max))
+ goto bogus_minmax;
+
+ do {
+ if (self->min != self->max) {
+ num_bytes = g_rand_int_range (self->rand, self->min, self->max);
+ } else {
+ num_bytes = self->min;
+ }
+
+ GST_LOG_OBJECT (self, "pulling %u bytes out of adapter", num_bytes);
+
+ buf = gst_adapter_take_buffer (self->adapter, num_bytes);
+
+ if (buf == NULL) {
+ if (!eos) {
+ GST_LOG_OBJECT (self, "not enough bytes in adapter");
+ break;
+ }
+
+ avail = gst_adapter_available (self->adapter);
+
+ if (avail == 0)
+ break;
+
+ if (avail < self->min) {
+ GST_WARNING_OBJECT (self, "discarding %u bytes at end (min=%u)",
+ avail, self->min);
+ gst_adapter_clear (self->adapter);
+ break;
+ }
+ buf = gst_adapter_take_buffer (self->adapter, avail);
+ g_assert (buf != NULL);
+ }
+
+ flow = gst_pad_push (self->srcpad, buf);
+ }
+ while (flow == GST_FLOW_OK);
+
+ return flow;
+
+/* ERRORS */
+bogus_minmax:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS,
+ ("The minimum buffer size is smaller than the maximum buffer size."),
+ ("buffer sizes: max=%d, min=%d", self->min, self->max));
+ return GST_FLOW_ERROR;
+ }
+}
+
+static gboolean
+gst_rnd_buffer_size_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event)
+{
+ GstRndBufferSize *rnd = GST_RND_BUFFER_SIZE (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ gst_rnd_buffer_size_drain_adapter (rnd, TRUE);
+ break;
+ case GST_EVENT_FLUSH_STOP:
+ if (rnd->adapter != NULL)
+ gst_adapter_clear (rnd->adapter);
+ break;
+ default:
+ break;
+ }
+
+ return gst_pad_push_event (rnd->srcpad, event);
+}
+
+static GstFlowReturn
+gst_rnd_buffer_size_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstRndBufferSize *rnd = GST_RND_BUFFER_SIZE (parent);
+ GstFlowReturn flow;
+
+ if (rnd->adapter == NULL)
+ rnd->adapter = gst_adapter_new ();
+
+ gst_adapter_push (rnd->adapter, buf);
+
+ flow = gst_rnd_buffer_size_drain_adapter (rnd, FALSE);
+
+ if (flow != GST_FLOW_OK)
+ GST_INFO_OBJECT (rnd, "flow: %s", gst_flow_get_name (flow));
+
+ return flow;
+}
+
static void
gst_rnd_buffer_size_loop (GstRndBufferSize * self)
{
@@ -416,7 +522,7 @@
{
GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS,
("The minimum buffer size is smaller than the maximum buffer size."),
- ("buffer sizes: max=%ld, min=%ld", self->min, self->max));
+ ("buffer sizes: max=%d, min=%d", self->min, self->max));
goto pause_task;
}
}
@@ -455,6 +561,10 @@
}
break;
case GST_STATE_CHANGE_READY_TO_NULL:
+ if (self->adapter) {
+ g_object_unref (self->adapter);
+ self->adapter = NULL;
+ }
break;
default:
break;
diff --git a/gst/deinterlace/Makefile.in b/gst/deinterlace/Makefile.in
index 89d9cd6..299708d 100644
--- a/gst/deinterlace/Makefile.in
+++ b/gst/deinterlace/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -283,7 +283,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/deinterlace/gstdeinterlace.c b/gst/deinterlace/gstdeinterlace.c
index 67b9fe2..ea8f011 100644
--- a/gst/deinterlace/gstdeinterlace.c
+++ b/gst/deinterlace/gstdeinterlace.c
@@ -34,6 +34,12 @@
* </refsect2>
*/
+/* FIXME PORTING 0.11:
+ * - getcaps/setcaps stuff needs revisiting
+ * - reconfiguration needs to be done differently
+ * - bufferalloc -> buffer pool/alloc query
+ */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -79,7 +85,7 @@
#define GST_DEINTERLACE_BUFFER_STATE_TC_T (1<<3)
#define GST_DEINTERLACE_BUFFER_STATE_TC_P (1<<4)
#define GST_DEINTERLACE_BUFFER_STATE_TC_M (1<<5)
-#define GST_DEINTERLACE_BUFFER_STATE_DROP (1<<6)
+#define GST_DEINTERLACE_BUFFER_STATE_RFF (1<<6)
#define GST_ONE \
(GST_DEINTERLACE_BUFFER_STATE_TC_T | GST_DEINTERLACE_BUFFER_STATE_TC_B)
@@ -87,7 +93,7 @@
(GST_DEINTERLACE_BUFFER_STATE_P | GST_DEINTERLACE_BUFFER_STATE_TC_P)
#define GST_INT \
(GST_DEINTERLACE_BUFFER_STATE_I | GST_DEINTERLACE_BUFFER_STATE_TC_M)
-#define GST_DRP (GST_DEINTERLACE_BUFFER_STATE_DROP)
+#define GST_RFF (GST_DEINTERLACE_BUFFER_STATE_RFF)
#define GST_DEINTERLACE_OBSCURE_THRESHOLD 5
@@ -97,9 +103,14 @@
/* 60i -> 30p or 50i -> 25p */
{"2:2", 1, 1, 1, {GST_INT,}},
/* 60i telecine -> 24p */
+ {"2:3-RFF", 4, 4, 5, {GST_PRG, GST_RFF, GST_PRG, GST_RFF,}},
{"2:3", 5, 4, 5, {GST_PRG, GST_PRG, GST_ONE, GST_ONE, GST_PRG,}},
+ {"3:2:2:3-RFF", 4, 4, 5, {GST_RFF, GST_PRG, GST_PRG, GST_RFF,}},
{"3:2:2:3", 5, 4, 5, {GST_PRG, GST_ONE, GST_INT, GST_ONE, GST_PRG,}},
- {"2:3:3:2", 5, 4, 5, {GST_PRG, GST_PRG, GST_DRP, GST_PRG, GST_PRG,}},
+ /* fieldanalysis should indicate this using RFF on the second and fourth
+ * buffers and not send the third buffer at all. it will be identified as
+ * 3:2:2:3-RFF */
+ /* {"2:3:3:2", 5, 4, 5, {GST_PRG, GST_PRG, GST_DRP, GST_PRG, GST_PRG,}}, */
/* The following patterns are obscure and are ignored if ignore-obscure is
* set to true. If any patterns are added above this line, check and edit
@@ -111,6 +122,8 @@
GST_PRG, GST_PRG, GST_ONE, GST_INT, GST_INT,
GST_INT, GST_INT, GST_INT, GST_INT, GST_INT,
GST_INT, GST_INT, GST_INT, GST_ONE, GST_PRG,}},
+#if 0
+ /* haven't figured out how fieldanalysis should handle these yet */
/* 60i (NTSC 30000/1001) -> 16p (16000/1001) */
{"3:4-3", 15, 8, 15, {GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,
GST_DRP, GST_PRG, GST_DRP, GST_PRG, GST_DRP,
@@ -125,6 +138,7 @@
{"3:3:4", 5, 3, 5, {GST_PRG, GST_DRP, GST_PRG, GST_DRP, GST_PRG,}},
/* NTSC 60i -> 20p */
{"3:3", 3, 2, 3, {GST_PRG, GST_DRP, GST_PRG,}},
+#endif
/* NTSC 60i -> 27.5 */
{"3:2-4", 11, 10, 11, {GST_PRG, GST_PRG, GST_PRG, GST_PRG, GST_PRG,
GST_PRG, GST_ONE, GST_INT, GST_INT, GST_INT,
@@ -257,14 +271,11 @@
return deinterlace_locking_type;
}
+#define DEINTERLACE_VIDEO_FORMATS \
+ "{ AYUV, ARGB, ABGR, RGBA, BGRA, Y444, xRGB, xBGR, RGBx, BGRx, RGB, " \
+ "BGR, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }"
-#define DEINTERLACE_CAPS \
- GST_VIDEO_CAPS_YUV ("{ AYUV, Y444, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }") ";" \
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_ABGR ";" \
- GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_BGRA ";" \
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";" \
- GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";" \
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR
+#define DEINTERLACE_CAPS GST_VIDEO_CAPS_MAKE(DEINTERLACE_VIDEO_FORMATS)
static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
@@ -284,19 +295,23 @@
static void gst_deinterlace_get_property (GObject * self, guint prop_id,
GValue * value, GParamSpec * pspec);
-static GstCaps *gst_deinterlace_getcaps (GstPad * pad);
-static gboolean gst_deinterlace_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_deinterlace_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_deinterlace_sink_query (GstPad * pad, GstQuery * query);
-static GstFlowReturn gst_deinterlace_chain (GstPad * pad, GstBuffer * buffer);
-static GstFlowReturn gst_deinterlace_alloc_buffer (GstPad * pad, guint64 offset,
- guint size, GstCaps * caps, GstBuffer ** buf);
+static GstCaps *gst_deinterlace_getcaps (GstDeinterlace * self, GstPad * pad,
+ GstCaps * filter);
+static gboolean gst_deinterlace_setcaps (GstDeinterlace * self, GstPad * pad,
+ GstCaps * caps);
+static gboolean gst_deinterlace_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_deinterlace_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static GstFlowReturn gst_deinterlace_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
static GstStateChangeReturn gst_deinterlace_change_state (GstElement * element,
GstStateChange transition);
-static gboolean gst_deinterlace_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_deinterlace_src_query (GstPad * pad, GstQuery * query);
-static const GstQueryType *gst_deinterlace_src_query_types (GstPad * pad);
+static gboolean gst_deinterlace_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_deinterlace_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstFlowReturn gst_deinterlace_output_frame (GstDeinterlace * self,
gboolean flushing);
@@ -307,6 +322,11 @@
static void gst_deinterlace_read_qos (GstDeinterlace * self,
gdouble * proportion, GstClockTime * time);
+#define IS_TELECINE(m) ((m) == GST_VIDEO_INTERLACE_MODE_MIXED && self->pattern > 1)
+
+/* FIXME: what's the point of the childproxy interface here? What can you
+ * actually do with it? The method objects seem to have no properties */
+#if 0
static void gst_deinterlace_child_proxy_interface_init (gpointer g_iface,
gpointer iface_data);
@@ -322,9 +342,11 @@
g_type_add_interface_static (object_type, GST_TYPE_CHILD_PROXY,
&child_proxy_interface_info);
}
+#endif
-GST_BOILERPLATE_FULL (GstDeinterlace, gst_deinterlace, GstElement,
- GST_TYPE_ELEMENT, _do_init);
+G_DEFINE_TYPE (GstDeinterlace, gst_deinterlace, GST_TYPE_ELEMENT);
+
+#define parent_class gst_deinterlace_parent_class
static const struct
{
@@ -347,29 +369,36 @@
gst_deinterlace_set_method (GstDeinterlace * self, GstDeinterlaceMethods method)
{
GType method_type;
+ gint width, height;
+ GstVideoFormat format;
GST_DEBUG_OBJECT (self, "Setting new method %d", method);
+ width = GST_VIDEO_INFO_WIDTH (&self->vinfo);
+ height = GST_VIDEO_INFO_HEIGHT (&self->vinfo);
+ format = GST_VIDEO_INFO_FORMAT (&self->vinfo);
+
if (self->method) {
if (self->method_id == method &&
gst_deinterlace_method_supported (G_TYPE_FROM_INSTANCE (self->method),
- self->format, self->width, self->height)) {
+ format, width, height)) {
GST_DEBUG_OBJECT (self, "Reusing current method");
return;
}
-
+#if 0
gst_child_proxy_child_removed (GST_OBJECT (self),
GST_OBJECT (self->method));
gst_object_unparent (GST_OBJECT (self->method));
self->method = NULL;
+#endif
}
method_type =
_method_types[method].get_type !=
NULL ? _method_types[method].get_type () : G_TYPE_INVALID;
if (method_type == G_TYPE_INVALID
- || !gst_deinterlace_method_supported (method_type, self->format,
- self->width, self->height)) {
+ || !gst_deinterlace_method_supported (method_type, format,
+ width, height)) {
GType tmp;
gint i;
@@ -380,8 +409,7 @@
if (_method_types[i].get_type == NULL)
continue;
tmp = _method_types[i].get_type ();
- if (gst_deinterlace_method_supported (tmp, self->format, self->width,
- self->height)) {
+ if (gst_deinterlace_method_supported (tmp, format, width, height)) {
GST_DEBUG_OBJECT (self, "Using method %d", i);
method_type = tmp;
method = i;
@@ -396,11 +424,12 @@
self->method_id = method;
gst_object_set_parent (GST_OBJECT (self->method), GST_OBJECT (self));
+#if 0
gst_child_proxy_child_added (GST_OBJECT (self), GST_OBJECT (self->method));
+#endif
if (self->method)
- gst_deinterlace_method_setup (self->method, self->format, self->width,
- self->height);
+ gst_deinterlace_method_setup (self->method, &self->vinfo);
}
static gboolean
@@ -408,7 +437,7 @@
{
gboolean ret = TRUE;
GstClockTime start, stop;
- gint64 cstart, cstop;
+ guint64 cstart, cstop;
GST_DEBUG_OBJECT (self,
"Clipping buffer to the current segment: %" GST_TIME_FORMAT " -- %"
@@ -446,9 +475,11 @@
}
static void
-gst_deinterlace_base_init (gpointer klass)
+gst_deinterlace_class_init (GstDeinterlaceClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ GstElementClass *element_class = (GstElementClass *) klass;
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_templ));
@@ -461,14 +492,6 @@
"Deinterlace Methods ported from DScaler/TvTime",
"Martin Eikermann <meiker@upb.de>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
-}
-
-static void
-gst_deinterlace_class_init (GstDeinterlaceClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
-
- GstElementClass *element_class = (GstElementClass *) klass;
gobject_class->set_property = gst_deinterlace_set_property;
gobject_class->get_property = gst_deinterlace_get_property;
@@ -650,6 +673,7 @@
GST_DEBUG_FUNCPTR (gst_deinterlace_change_state);
}
+#if 0
static GstObject *
gst_deinterlace_child_proxy_get_child_by_index (GstChildProxy * child_proxy,
guint index)
@@ -678,38 +702,30 @@
iface->get_child_by_index = gst_deinterlace_child_proxy_get_child_by_index;
iface->get_children_count = gst_deinterlace_child_proxy_get_children_count;
}
+#endif
static void
-gst_deinterlace_init (GstDeinterlace * self, GstDeinterlaceClass * klass)
+gst_deinterlace_init (GstDeinterlace * self)
{
self->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
gst_pad_set_chain_function (self->sinkpad,
GST_DEBUG_FUNCPTR (gst_deinterlace_chain));
gst_pad_set_event_function (self->sinkpad,
GST_DEBUG_FUNCPTR (gst_deinterlace_sink_event));
- gst_pad_set_setcaps_function (self->sinkpad,
- GST_DEBUG_FUNCPTR (gst_deinterlace_setcaps));
- gst_pad_set_getcaps_function (self->sinkpad,
- GST_DEBUG_FUNCPTR (gst_deinterlace_getcaps));
gst_pad_set_query_function (self->sinkpad,
GST_DEBUG_FUNCPTR (gst_deinterlace_sink_query));
- gst_pad_set_bufferalloc_function (self->sinkpad,
- GST_DEBUG_FUNCPTR (gst_deinterlace_alloc_buffer));
gst_element_add_pad (GST_ELEMENT (self), self->sinkpad);
self->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
gst_pad_set_event_function (self->srcpad,
GST_DEBUG_FUNCPTR (gst_deinterlace_src_event));
- gst_pad_set_query_type_function (self->srcpad,
- GST_DEBUG_FUNCPTR (gst_deinterlace_src_query_types));
gst_pad_set_query_function (self->srcpad,
GST_DEBUG_FUNCPTR (gst_deinterlace_src_query));
- gst_pad_set_getcaps_function (self->srcpad,
- GST_DEBUG_FUNCPTR (gst_deinterlace_getcaps));
gst_element_add_pad (GST_ELEMENT (self), self->srcpad);
self->mode = DEFAULT_MODE;
self->user_set_method_id = DEFAULT_METHOD;
+ gst_video_info_init (&self->vinfo);
gst_deinterlace_set_method (self, self->user_set_method_id);
self->fields = DEFAULT_FIELDS;
self->field_layout = DEFAULT_FIELD_LAYOUT;
@@ -729,6 +745,22 @@
gst_deinterlace_reset (self);
}
+static GstVideoFrame *
+gst_video_frame_new_and_map (GstVideoInfo * vinfo, GstBuffer * buffer,
+ GstMapFlags flags)
+{
+ GstVideoFrame *frame = g_malloc0 (sizeof (GstVideoFrame));
+ gst_video_frame_map (frame, vinfo, buffer, flags);
+ return frame;
+}
+
+static void
+gst_video_frame_unmap_and_free (GstVideoFrame * frame)
+{
+ gst_video_frame_unmap (frame);
+ g_free (frame);
+}
+
static void
gst_deinterlace_reset_history (GstDeinterlace * self, gboolean drop_all)
{
@@ -749,9 +781,9 @@
self->history_count);
for (i = 0; i < self->history_count; i++) {
- if (self->field_history[i].buf) {
- gst_buffer_unref (self->field_history[i].buf);
- self->field_history[i].buf = NULL;
+ if (self->field_history[i].frame) {
+ gst_video_frame_unmap_and_free (self->field_history[i].frame);
+ self->field_history[i].frame = NULL;
}
}
}
@@ -775,8 +807,14 @@
static void
gst_deinterlace_update_passthrough (GstDeinterlace * self)
{
- self->passthrough = (self->mode == GST_DEINTERLACE_MODE_DISABLED
- || (!self->interlaced && self->mode != GST_DEINTERLACE_MODE_INTERLACED));
+ if (self->mode == GST_DEINTERLACE_MODE_DISABLED)
+ self->passthrough = TRUE;
+ else if (!GST_VIDEO_INFO_IS_INTERLACED (&self->vinfo)
+ && self->mode != GST_DEINTERLACE_MODE_INTERLACED)
+ self->passthrough = TRUE;
+ else
+ self->passthrough = FALSE;
+
GST_DEBUG_OBJECT (self, "Passthrough: %d", self->passthrough);
}
@@ -785,11 +823,8 @@
{
GST_DEBUG_OBJECT (self, "Resetting internal state");
- self->format = GST_VIDEO_FORMAT_UNKNOWN;
- self->width = 0;
- self->height = 0;
- self->frame_size = 0;
- self->fps_n = self->fps_d = 0;
+ gst_video_info_init (&self->vinfo);
+
self->passthrough = FALSE;
self->reconfigure = FALSE;
@@ -820,7 +855,6 @@
{
GstDeinterlace *self;
- g_return_if_fail (GST_IS_DEINTERLACE (object));
self = GST_DEINTERLACE (object);
switch (prop_id) {
@@ -829,7 +863,8 @@
GST_OBJECT_LOCK (self);
new_mode = g_value_get_enum (value);
- if (self->mode != new_mode && GST_PAD_CAPS (self->srcpad)) {
+ /* FIXME: reconfiguration should probably be done differently */
+ if (self->mode != new_mode && gst_pad_has_current_caps (self->srcpad)) {
self->reconfigure = TRUE;
self->new_mode = new_mode;
} else {
@@ -848,7 +883,8 @@
GST_OBJECT_LOCK (self);
new_fields = g_value_get_enum (value);
- if (self->fields != new_fields && GST_PAD_CAPS (self->srcpad)) {
+ /* FIXME: reconfiguration should probably be done differently */
+ if (self->fields != new_fields && gst_pad_has_current_caps (self->srcpad)) {
self->reconfigure = TRUE;
self->new_fields = new_fields;
} else {
@@ -881,7 +917,6 @@
{
GstDeinterlace *self;
- g_return_if_fail (GST_IS_DEINTERLACE (object));
self = GST_DEINTERLACE (object);
switch (prop_id) {
@@ -942,32 +977,40 @@
}
self->pattern_base_ts = self->buf_states[state_idx].timestamp;
- self->pattern_buf_dur =
- (self->buf_states[state_idx].duration *
- telecine_patterns[self->pattern].ratio_d) /
- telecine_patterns[self->pattern].ratio_n;
+ if (self->buf_states[state_idx].state != GST_RFF) {
+ self->pattern_buf_dur =
+ (self->buf_states[state_idx].duration *
+ telecine_patterns[self->pattern].ratio_d) /
+ telecine_patterns[self->pattern].ratio_n;
+ } else {
+ self->pattern_buf_dur =
+ (self->buf_states[state_idx].duration *
+ telecine_patterns[self->pattern].ratio_d * 2) /
+ (telecine_patterns[self->pattern].ratio_n * 3);
+ }
GST_DEBUG_OBJECT (self,
"Starting a new pattern repeat with base ts %" GST_TIME_FORMAT
" and dur %" GST_TIME_FORMAT, GST_TIME_ARGS (self->pattern_base_ts),
GST_TIME_ARGS (self->pattern_buf_dur));
}
-static GstBuffer *
+static GstVideoFrame *
gst_deinterlace_pop_history (GstDeinterlace * self)
{
- GstBuffer *buffer;
+ GstVideoFrame *frame;
g_return_val_if_fail (self->history_count > 0, NULL);
- GST_DEBUG_OBJECT (self, "Pop last history buffer -- current history size %d",
+ GST_DEBUG_OBJECT (self, "Pop last history frame -- current history size %d",
self->history_count);
- buffer = self->field_history[self->history_count - 1].buf;
+ frame = self->field_history[self->history_count - 1].frame;
self->history_count--;
if (self->locking != GST_DEINTERLACE_LOCKING_NONE && (!self->history_count
- || GST_BUFFER_DATA (buffer) !=
- GST_BUFFER_DATA (self->field_history[self->history_count - 1].buf))) {
+ || GST_VIDEO_FRAME_PLANE_DATA (frame, 0) !=
+ GST_VIDEO_FRAME_PLANE_DATA (self->field_history[self->history_count -
+ 1].frame, 0))) {
if (!self->low_latency)
self->state_count--;
if (self->pattern_lock) {
@@ -976,81 +1019,48 @@
&& self->pattern_count >= telecine_patterns[self->pattern].length) {
self->pattern_count = 0;
self->output_count = 0;
- gst_deinterlace_update_pattern_timestamps (self);
}
}
}
- GST_DEBUG_OBJECT (self, "Returning buffer: %p %" GST_TIME_FORMAT
- " with duration %" GST_TIME_FORMAT " and size %u", buffer,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_BUFFER_SIZE (buffer));
+ GST_DEBUG_OBJECT (self, "Returning frame: %p %" GST_TIME_FORMAT
+ " with duration %" GST_TIME_FORMAT " and size %u", frame,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (frame->buffer)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (frame->buffer)),
+ GST_VIDEO_FRAME_SIZE (frame));
- return buffer;
-}
-
-typedef enum
-{
- GST_DEINTERLACE_PROGRESSIVE,
- GST_DEINTERLACE_INTERLACED,
- GST_DEINTERLACE_TELECINE,
-} GstDeinterlaceInterlacingMethod;
-
-static GstDeinterlaceInterlacingMethod
-gst_deinterlace_get_interlacing_method (const GstCaps * caps)
-{
- GstDeinterlaceInterlacingMethod method = 0;
- gboolean interlaced;
-
- /* check interlaced cap, defaulting to FALSE */
- if (!gst_structure_get_boolean (gst_caps_get_structure (caps, 0),
- "interlaced", &interlaced))
- interlaced = FALSE;
-
- method =
- interlaced ? GST_DEINTERLACE_INTERLACED : GST_DEINTERLACE_PROGRESSIVE;
-
- if (method == GST_DEINTERLACE_INTERLACED) {
- const gchar *temp =
- gst_structure_get_string (gst_caps_get_structure (caps, 0),
- "interlacing-method");
- if (temp && g_str_equal (temp, "telecine"))
- method = GST_DEINTERLACE_TELECINE;
- }
-
- return method;
+ return frame;
}
static void
-gst_deinterlace_get_buffer_state (GstDeinterlace * self, GstBuffer * buffer,
- guint8 * state, GstDeinterlaceInterlacingMethod * i_method)
+gst_deinterlace_get_buffer_state (GstDeinterlace * self, GstVideoFrame * frame,
+ guint8 * state, GstVideoInterlaceMode * i_mode)
{
- GstDeinterlaceInterlacingMethod interlacing_method;
+ GstVideoInterlaceMode interlacing_mode;
- if (!(i_method || state))
+ if (!(i_mode || state))
return;
- interlacing_method =
- gst_deinterlace_get_interlacing_method (GST_BUFFER_CAPS (buffer));
+ interlacing_mode = GST_VIDEO_INFO_INTERLACE_MODE (&frame->info);
if (state) {
- if (interlacing_method == GST_DEINTERLACE_TELECINE) {
- if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_RFF)) {
- *state = GST_DEINTERLACE_BUFFER_STATE_DROP;
- } else if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_ONEFIELD)) {
+ if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED) {
+ if (GST_VIDEO_FRAME_IS_RFF (frame)) {
+ *state = GST_DEINTERLACE_BUFFER_STATE_RFF;
+ } else if (GST_VIDEO_FRAME_IS_ONEFIELD (frame)) {
/* tc top if tff, tc bottom otherwise */
- if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_TFF)) {
+ if (GST_VIDEO_FRAME_IS_TFF (frame)) {
*state = GST_DEINTERLACE_BUFFER_STATE_TC_T;
} else {
*state = GST_DEINTERLACE_BUFFER_STATE_TC_B;
}
- } else if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_PROGRESSIVE)) {
- *state = GST_DEINTERLACE_BUFFER_STATE_TC_P;
- } else {
+ } else if (GST_VIDEO_FRAME_IS_INTERLACED (frame)) {
*state = GST_DEINTERLACE_BUFFER_STATE_TC_M;
+ } else {
+ *state = GST_DEINTERLACE_BUFFER_STATE_TC_P;
}
} else {
- if (interlacing_method == GST_DEINTERLACE_INTERLACED) {
+ if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_INTERLEAVED) {
*state = GST_DEINTERLACE_BUFFER_STATE_I;
} else {
*state = GST_DEINTERLACE_BUFFER_STATE_P;
@@ -1058,42 +1068,59 @@
}
}
- if (i_method)
- *i_method = interlacing_method;
+ if (i_mode)
+ *i_mode = interlacing_mode;
}
+#define STATE_TO_STRING(s) ((s) == GST_DEINTERLACE_BUFFER_STATE_P ? "P" : \
+ (s) == GST_DEINTERLACE_BUFFER_STATE_I ? "I" : \
+ (s) == GST_DEINTERLACE_BUFFER_STATE_TC_B ? "B" : \
+ (s) == GST_DEINTERLACE_BUFFER_STATE_TC_T ? "T" : \
+ (s) == GST_DEINTERLACE_BUFFER_STATE_TC_P ? "TCP" : \
+ (s) == GST_DEINTERLACE_BUFFER_STATE_TC_M ? "TCM" : "RFF")
+
+#define MODE_TO_STRING(m) ((m) == GST_VIDEO_INTERLACE_MODE_MIXED ? "MIXED" : \
+ (m) == GST_VIDEO_INTERLACE_MODE_INTERLEAVED ? "I" : \
+ (m) == GST_VIDEO_INTERLACE_MODE_FIELDS ? "FIELDS" : "P")
+
static void
gst_deinterlace_push_history (GstDeinterlace * self, GstBuffer * buffer)
{
int i = 1;
- GstClockTime timestamp;
GstDeinterlaceFieldLayout field_layout = self->field_layout;
- gboolean repeated = GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_RFF);
- gboolean tff = GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_TFF);
- gboolean onefield =
- GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_ONEFIELD);
- GstBuffer *field1, *field2;
- guint fields_to_push = (onefield) ? 1 : (!repeated) ? 2 : 3;
+ gboolean tff;
+ gboolean onefield;
+ GstVideoFrame *frame = NULL;
+ GstVideoFrame *field1, *field2 = NULL;
+ guint fields_to_push;
gint field1_flags, field2_flags;
- GstDeinterlaceInterlacingMethod interlacing_method;
+ GstVideoInterlaceMode interlacing_mode;
guint8 buf_state;
+ /* we will only read from this buffer and write into fresh output buffers
+ * if this is not the case, change the map flags as appropriate
+ */
+ frame = gst_video_frame_new_and_map (&self->vinfo, buffer, GST_MAP_READ);
+ /* we can manage the buffer ref count using the maps from here on */
+ gst_buffer_unref (buffer);
+
+ tff = GST_VIDEO_FRAME_IS_TFF (frame);
+ onefield = GST_VIDEO_FRAME_IS_ONEFIELD (frame);
+ fields_to_push = (onefield) ? 1 : 2;
+
g_return_if_fail (self->history_count <
GST_DEINTERLACE_MAX_FIELD_HISTORY - fields_to_push);
- gst_deinterlace_get_buffer_state (self, buffer, &buf_state,
- &interlacing_method);
+ gst_deinterlace_get_buffer_state (self, frame, &buf_state, &interlacing_mode);
GST_DEBUG_OBJECT (self,
- "Pushing new buffer to the history: ptr %p at %" GST_TIME_FORMAT
- " with duration %" GST_TIME_FORMAT
- ", size %u, state %u, interlacing method %s", GST_BUFFER_DATA (buffer),
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_BUFFER_SIZE (buffer),
- buf_state,
- interlacing_method ==
- GST_DEINTERLACE_TELECINE ? "TC" : interlacing_method ==
- GST_DEINTERLACE_INTERLACED ? "I" : "P");
+ "Pushing new frame as %d fields to the history (count before %d): ptr %p at %"
+ GST_TIME_FORMAT " with duration %" GST_TIME_FORMAT
+ ", size %u, state %s, interlacing mode %s", fields_to_push,
+ self->history_count, frame, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
+ gst_buffer_get_size (buffer),
+ STATE_TO_STRING (buf_state), MODE_TO_STRING (interlacing_mode));
/* move up for new state */
memmove (&self->buf_states[1], &self->buf_states[0],
@@ -1105,26 +1132,15 @@
if (self->state_count < GST_DEINTERLACE_MAX_BUFFER_STATE_HISTORY)
self->state_count++;
- if (buf_state == GST_DEINTERLACE_BUFFER_STATE_DROP) {
- GST_DEBUG_OBJECT (self,
- "Buffer contains only unneeded repeated fields, dropping and not"
- "adding to field history");
- gst_buffer_unref (buffer);
- return;
- }
-
- /* telecine does not make use of repeated fields */
- if (interlacing_method == GST_DEINTERLACE_TELECINE)
- repeated = FALSE;
-
for (i = GST_DEINTERLACE_MAX_FIELD_HISTORY - 1; i >= fields_to_push; i--) {
- self->field_history[i].buf = self->field_history[i - fields_to_push].buf;
+ self->field_history[i].frame =
+ self->field_history[i - fields_to_push].frame;
self->field_history[i].flags =
self->field_history[i - fields_to_push].flags;
}
if (field_layout == GST_DEINTERLACE_LAYOUT_AUTO) {
- if (!self->interlaced) {
+ if (!GST_VIDEO_INFO_IS_INTERLACED (&self->vinfo)) {
GST_WARNING_OBJECT (self, "Can't detect field layout -- assuming TFF");
field_layout = GST_DEINTERLACE_LAYOUT_TFF;
} else if (tff) {
@@ -1134,53 +1150,30 @@
}
}
+ field1 = frame;
+ field2 = gst_video_frame_new_and_map (&self->vinfo, buffer, GST_MAP_READ);
if (field_layout == GST_DEINTERLACE_LAYOUT_TFF) {
GST_DEBUG_OBJECT (self, "Top field first");
- field1 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
field1_flags = PICTURE_INTERLACED_TOP;
- field2 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
field2_flags = PICTURE_INTERLACED_BOTTOM;
} else {
GST_DEBUG_OBJECT (self, "Bottom field first");
- field1 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
field1_flags = PICTURE_INTERLACED_BOTTOM;
- field2 = gst_buffer_make_metadata_writable (gst_buffer_ref (buffer));
field2_flags = PICTURE_INTERLACED_TOP;
}
- if (interlacing_method != GST_DEINTERLACE_TELECINE) {
- /* Timestamps are assigned to the field buffers under the assumption that
- the timestamp of the buffer equals the first fields timestamp */
-
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
- GST_BUFFER_TIMESTAMP (field1) = timestamp;
- GST_BUFFER_TIMESTAMP (field2) = timestamp + self->field_duration;
- if (repeated)
- GST_BUFFER_TIMESTAMP (field2) += self->field_duration;
- }
-
- if (repeated) {
- self->field_history[2].buf = field1;
- self->field_history[2].flags = field1_flags;
-
- self->field_history[1].buf = field2;
- self->field_history[1].flags = field2_flags;
-
- self->field_history[0].buf =
- gst_buffer_make_metadata_writable (gst_buffer_ref (field1));
- GST_BUFFER_TIMESTAMP (self->field_history[0].buf) +=
- 2 * self->field_duration;
- self->field_history[0].flags = field1_flags;
- } else if (!onefield) {
- self->field_history[1].buf = field1;
+ if (!onefield) {
+ GST_DEBUG_OBJECT (self, "Two fields");
+ self->field_history[1].frame = field1;
self->field_history[1].flags = field1_flags;
- self->field_history[0].buf = field2;
+ self->field_history[0].frame = field2;
self->field_history[0].flags = field2_flags;
} else { /* onefield */
- self->field_history[0].buf = field1;
+ GST_DEBUG_OBJECT (self, "One field");
+ self->field_history[0].frame = field1;
self->field_history[0].flags = field1_flags;
- gst_buffer_unref (field2);
+ gst_video_frame_unmap_and_free (field2);
}
self->history_count += fields_to_push;
@@ -1191,7 +1184,7 @@
if (self->last_buffer)
gst_buffer_unref (self->last_buffer);
- self->last_buffer = buffer;
+ self->last_buffer = gst_buffer_ref (buffer);
}
static void
@@ -1223,6 +1216,8 @@
gst_deinterlace_reset_qos (GstDeinterlace * self)
{
gst_deinterlace_update_qos (self, 0.5, 0, GST_CLOCK_TIME_NONE);
+ self->processed = 0;
+ self->dropped = 0;
}
static void
@@ -1238,15 +1233,16 @@
/* Perform qos calculations before processing the next frame. Returns TRUE if
* the frame should be processed, FALSE if the frame can be dropped entirely */
static gboolean
-gst_deinterlace_do_qos (GstDeinterlace * self, GstClockTime timestamp)
+gst_deinterlace_do_qos (GstDeinterlace * self, const GstBuffer * buffer)
{
GstClockTime qostime, earliest_time;
+ GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
gdouble proportion;
/* no timestamp, can't do QoS => process frame */
if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp))) {
GST_LOG_OBJECT (self, "invalid timestamp, can't do QoS, process frame");
- return TRUE;
+ goto keep_frame;
}
/* get latest QoS observation values */
@@ -1255,7 +1251,7 @@
/* skip qos if we have no observation (yet) => process frame */
if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (earliest_time))) {
GST_LOG_OBJECT (self, "no observation yet, process frame");
- return TRUE;
+ goto keep_frame;
}
/* qos is done on running time */
@@ -1267,44 +1263,62 @@
GST_TIME_FORMAT, GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time));
if (qostime != GST_CLOCK_TIME_NONE && qostime <= earliest_time) {
+ GstClockTime stream_time, jitter;
+ GstMessage *qos_msg;
+
GST_DEBUG_OBJECT (self, "we are late, drop frame");
+ self->dropped++;
+ stream_time =
+ gst_segment_to_stream_time (&self->segment, GST_FORMAT_TIME, timestamp);
+ jitter = GST_CLOCK_DIFF (qostime, earliest_time);
+ qos_msg =
+ gst_message_new_qos (GST_OBJECT (self), FALSE, qostime, stream_time,
+ timestamp, GST_BUFFER_DURATION (buffer));
+ gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000);
+ gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
+ self->processed, self->dropped);
+ gst_element_post_message (GST_ELEMENT (self), qos_msg);
return FALSE;
}
GST_LOG_OBJECT (self, "process frame");
+keep_frame:
+ self->processed++;
return TRUE;
}
static gboolean
gst_deinterlace_fix_timestamps (GstDeinterlace * self,
- GstDeinterlaceField * field1, GstDeinterlaceField * field2)
+ GstVideoFrame * field1, GstVideoFrame * field2)
{
- GstDeinterlaceField *field3, *field4;
- GstDeinterlaceInterlacingMethod interlacing_method;
+ GstVideoFrame *field3, *field4;
+ GstVideoInterlaceMode interlacing_mode;
if (self->pattern_lock && self->pattern > -1) {
/* accurate pattern-locked timestamp adjustment */
if (!self->pattern_count)
gst_deinterlace_update_pattern_timestamps (self);
- GST_BUFFER_TIMESTAMP (field1->buf) =
+ GST_BUFFER_TIMESTAMP (field1->buffer) =
self->pattern_base_ts + self->output_count * self->pattern_buf_dur;
- GST_BUFFER_DURATION (field1->buf) = self->pattern_buf_dur;
+ GST_BUFFER_DURATION (field1->buffer) = self->pattern_buf_dur;
self->output_count++;
} else {
/* naive (but low-latency) timestamp adjustment based on subsequent
* fields/buffers */
if (field2
- && GST_BUFFER_DATA (field1->buf) != GST_BUFFER_DATA (field2->buf)) {
- if (GST_BUFFER_TIMESTAMP (field1->buf) +
- GST_BUFFER_DURATION (field1->buf) ==
- GST_BUFFER_TIMESTAMP (field2->buf)) {
- GST_BUFFER_TIMESTAMP (field1->buf) =
- GST_BUFFER_TIMESTAMP (field2->buf) =
- (GST_BUFFER_TIMESTAMP (field1->buf) +
- GST_BUFFER_TIMESTAMP (field2->buf)) / 2;
+ && GST_VIDEO_FRAME_PLANE_DATA (field1,
+ 0) != GST_VIDEO_FRAME_PLANE_DATA (field2, 0)) {
+ if (GST_BUFFER_TIMESTAMP (field1->buffer) +
+ GST_BUFFER_DURATION (field1->buffer) ==
+ GST_BUFFER_TIMESTAMP (field2->buffer)) {
+ GST_BUFFER_TIMESTAMP (field1->buffer) =
+ GST_BUFFER_TIMESTAMP (field2->buffer) =
+ (GST_BUFFER_TIMESTAMP (field1->buffer) +
+ GST_BUFFER_TIMESTAMP (field2->buffer)) / 2;
} else {
- GST_BUFFER_TIMESTAMP (field2->buf) = GST_BUFFER_TIMESTAMP (field1->buf);
+ GST_BUFFER_TIMESTAMP (field2->buffer) =
+ GST_BUFFER_TIMESTAMP (field1->buffer);
}
}
@@ -1314,33 +1328,34 @@
return FALSE;
}
- field3 = &self->field_history[self->history_count - 3];
- interlacing_method =
- gst_deinterlace_get_interlacing_method (GST_BUFFER_CAPS (field3->buf));
- if (interlacing_method == GST_DEINTERLACE_TELECINE) {
+ field3 = self->field_history[self->history_count - 3].frame;
+ interlacing_mode = GST_VIDEO_INFO_INTERLACE_MODE (&field3->info);
+ if (IS_TELECINE (interlacing_mode)) {
if (self->history_count < 4) {
GST_DEBUG_OBJECT (self, "Need more fields (have %d, need 4)",
self->history_count);
return FALSE;
}
- field4 = &self->field_history[self->history_count - 4];
- if (GST_BUFFER_DATA (field3->buf) != GST_BUFFER_DATA (field4->buf)) {
+ field4 = self->field_history[self->history_count - 4].frame;
+ if (GST_VIDEO_FRAME_PLANE_DATA (field3,
+ 0) != GST_VIDEO_FRAME_PLANE_DATA (field4, 0)) {
/* telecine fields in separate buffers */
- GST_BUFFER_TIMESTAMP (field3->buf) =
- (GST_BUFFER_TIMESTAMP (field3->buf) +
- GST_BUFFER_TIMESTAMP (field4->buf)) / 2;
+ GST_BUFFER_TIMESTAMP (field3->buffer) =
+ (GST_BUFFER_TIMESTAMP (field3->buffer) +
+ GST_BUFFER_TIMESTAMP (field4->buffer)) / 2;
}
}
- GST_BUFFER_DURATION (field1->buf) =
- GST_BUFFER_TIMESTAMP (field3->buf) - GST_BUFFER_TIMESTAMP (field1->buf);
+ GST_BUFFER_DURATION (field1->buffer) =
+ GST_BUFFER_TIMESTAMP (field3->buffer) -
+ GST_BUFFER_TIMESTAMP (field1->buffer);
}
GST_DEBUG_OBJECT (self,
"Field 1 adjusted to ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1->buf)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (field1->buf)));
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1->buffer)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (field1->buffer)));
return TRUE;
}
@@ -1386,7 +1401,8 @@
/* loop over all phases */
for (j = 0; j < length; j++) {
/* low-latency mode looks at past buffers, high latency at future buffers */
- const gint state_idx = (self->low_latency ? length : state_count) - 1;
+ const gint state_idx =
+ self->low_latency ? (self->history_count - 1) >> 1 : state_count - 1;
/* loop over history, breaking on differing buffer states */
for (k = 0; k < length && k < state_count; k++) {
const guint8 hist = self->buf_states[state_idx - k].state;
@@ -1405,12 +1421,6 @@
score = k;
pattern = i;
phase = j;
- if (self->low_latency) {
- /* state_idx + 1 is the number of buffers yet to be pushed out
- * so length - state_idx - 1 is the number of old buffers in the
- * pattern */
- phase = (phase + length - state_idx - 1) % length;
- }
}
}
}
@@ -1433,7 +1443,10 @@
do {
if (state & GST_ONE) {
field_count++;
+#if 0
} else if (!(state & GST_DRP)) {
+#endif
+ } else {
field_count += 2;
}
i++;
@@ -1459,8 +1472,9 @@
GstFlowReturn ret;
gint fields_required;
GstBuffer *buf, *outbuf;
+ GstVideoFrame *outframe = NULL;
GstDeinterlaceField *field1, *field2;
- GstDeinterlaceInterlacingMethod interlacing_method;
+ GstVideoInterlaceMode interlacing_mode;
guint8 buf_state;
gboolean hl_no_lock; /* indicates high latency timestamp adjustment but no pattern lock (could be ONEF or I) */
gboolean same_buffer; /* are field1 and field2 in the same buffer? */
@@ -1493,18 +1507,25 @@
return GST_FLOW_ERROR;
}
- gst_deinterlace_get_buffer_state (self, field1->buf, &buf_state,
- &interlacing_method);
+ gst_deinterlace_get_buffer_state (self, field1->frame, &buf_state,
+ &interlacing_mode);
if (self->pattern != -1)
pattern = telecine_patterns[self->pattern];
/* patterns 0 and 1 are interlaced, the rest are telecine */
if (self->pattern > 1)
- interlacing_method = GST_DEINTERLACE_TELECINE;
+ interlacing_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
if (self->pattern == -1 || self->pattern_refresh
|| !(buf_state & pattern.states[(phase + count) % pattern.length])) {
+ if (self->pattern == -1) {
+ GST_DEBUG_OBJECT (self, "No pattern lock - refresh lock");
+ } else if (self->pattern_refresh) {
+ GST_DEBUG_OBJECT (self, "Pattern refresh - refresh lock");
+ } else {
+ GST_DEBUG_OBJECT (self, "Unexpected buffer state - refresh lock");
+ }
/* no pattern, pattern refresh set or unexpected buffer state */
self->pattern_lock = FALSE;
self->pattern_refresh = TRUE;
@@ -1526,36 +1547,99 @@
}
/* setcaps on sink and src pads */
- gst_deinterlace_setcaps (self->sinkpad, GST_PAD_CAPS (self->sinkpad));
+ gst_deinterlace_setcaps (self, self->sinkpad, gst_pad_get_current_caps (self->sinkpad)); // FIXME
if (flush_one && self->drop_orphans) {
GST_DEBUG_OBJECT (self, "Dropping orphan first field");
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
goto restart;
}
}
} else {
- gst_deinterlace_get_buffer_state (self, field1->buf, NULL,
- &interlacing_method);
+ gst_deinterlace_get_buffer_state (self, field1->frame, NULL,
+ &interlacing_mode);
}
same_buffer = self->history_count >= 2
- && (GST_BUFFER_DATA (field1->buf) ==
- GST_BUFFER_DATA (self->field_history[self->history_count - 2].buf));
+ && (GST_VIDEO_FRAME_PLANE_DATA (field1->frame, 0) ==
+ GST_VIDEO_FRAME_PLANE_DATA (self->field_history[self->history_count -
+ 2].frame, 0));
if ((flushing && self->history_count == 1) || (flush_one
&& !self->drop_orphans) || (hl_no_lock && (self->history_count == 1
|| !same_buffer))) {
+ /* This case is for flushing a single field:
+ * - flushing and 1 field in the history
+ * - flush one (due to orphans in the pattern) and do not drop orphans
+ * - high-latency pattern locking with no possible lock given the current
+ * state and either only one field in the history or the tip two fields
+ * are in separate buffers */
GST_DEBUG_OBJECT (self, "Flushing one field using linear method");
gst_deinterlace_set_method (self, GST_DEINTERLACE_LINEAR);
fields_required = gst_deinterlace_method_get_fields_required (self->method);
- } else if (interlacing_method == GST_DEINTERLACE_TELECINE
- && (self->low_latency > 0 || self->pattern != -1 || (hl_no_lock
- && same_buffer
- && GST_BUFFER_FLAG_IS_SET (field1->buf,
- GST_VIDEO_BUFFER_PROGRESSIVE)))) {
- /* telecined - we reconstruct frames by weaving pairs of fields */
+ } else if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_PROGRESSIVE ||
+ (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED &&
+ !GST_VIDEO_FRAME_IS_INTERLACED (field1->frame))) {
+ /* This case is for processing progressive buffers, telecine or plain
+ * progressive */
+ GstVideoFrame *field1_frame;
+ GstBuffer *field1_buffer;
+
+ /* progressive */
+ fields_required = 2;
+
+ /* Not enough fields in the history */
+ if (!flushing && self->history_count < fields_required) {
+ GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
+ self->history_count, self->cur_field_idx + fields_required);
+ goto need_more;
+ }
+
+ field2 = &self->field_history[self->history_count - 2];
+ if (GST_VIDEO_FRAME_PLANE_DATA (field1->frame,
+ 0) != GST_VIDEO_FRAME_PLANE_DATA (field2->frame, 0)) {
+ /* ERROR - next two fields in field history are not one progressive buffer - weave? */
+ GST_ERROR_OBJECT (self,
+ "Progressive buffer but two fields at tip aren't in the same buffer!");
+ }
+
+ if (IS_TELECINE (interlacing_mode)
+ && !gst_deinterlace_fix_timestamps (self, field1->frame, field2->frame)
+ && !flushing)
+ goto need_more;
+
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Progressive; pushing buffer as a frame");
+ /* pop and push */
+ self->cur_field_idx--;
+ field1_frame = gst_deinterlace_pop_history (self);
+ field1_buffer = field1_frame->buffer;
+ gst_buffer_ref (field1_buffer);
+ gst_video_frame_unmap_and_free (field1_frame);
+ /* field2 is the same buffer as field1, but we need to remove it from the
+ * history anyway */
+ self->cur_field_idx--;
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
+ GST_DEBUG_OBJECT (self,
+ "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buffer)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buffer)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buffer) +
+ GST_BUFFER_DURATION (field1_buffer)));
+ return gst_pad_push (self->srcpad, field1_buffer);
+ } else if (IS_TELECINE (interlacing_mode)
+ && GST_VIDEO_FRAME_IS_INTERLACED (field1->frame) && !same_buffer) {
+ /* This case needs to identify telecine mixed buffers that require weaving
+ * of two fields in different buffers.
+ * - interlacing mode is mixed
+ * - locked on to a telecine pattern
+ * - frame is interlaced
+ * - fields are in separate buffers
+ * If we don't yet have a pattern lock, we will have to deinterlace as we
+ * don't explicitly know we have a telecine sequence and so we drop through
+ * to the plain deinterlace case */
fields_required = 2;
if (!flushing && self->history_count < fields_required) {
GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
@@ -1564,49 +1648,25 @@
}
field2 = &self->field_history[self->history_count - 2];
- if (!gst_deinterlace_fix_timestamps (self, field1, field2) && !flushing)
+ if (!gst_deinterlace_fix_timestamps (self, field1->frame, field2->frame)
+ && !flushing)
goto need_more;
- if (same_buffer) {
- /* telecine progressive */
- GstBuffer *field1_buf;
-
- GST_DEBUG_OBJECT (self,
- "Frame type: Telecine Progressive; pushing buffer as a frame");
- /* pop and push */
- self->cur_field_idx--;
- field1_buf = gst_deinterlace_pop_history (self);
- /* field2 is the same buffer as field1, but we need to remove it from
- * the history anyway */
- self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
- /* set the caps from the src pad on the buffer as they should be correct */
- gst_buffer_set_caps (field1_buf, GST_PAD_CAPS (self->srcpad));
- GST_DEBUG_OBJECT (self,
- "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
- GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buf)),
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf) +
- GST_BUFFER_DURATION (field1_buf)));
- return gst_pad_push (self->srcpad, field1_buf);
- } else {
- /* telecine fields in separate buffers */
-
- /* check field1 and field2 buffer caps and flags are corresponding */
- if (field1->flags == field2->flags) {
- /* ERROR - fields are of same parity - what should be done here?
- * perhaps deinterlace the tip field and start again? */
- GST_ERROR_OBJECT (self, "Telecine mixed with fields of same parity!");
- }
- GST_DEBUG_OBJECT (self,
- "Frame type: Telecine Mixed; weaving tip two fields into a frame");
- /* set method to WEAVE */
- gst_deinterlace_set_method (self, GST_DEINTERLACE_WEAVE);
+ /* check field1 and field2 buffer caps and flags are corresponding */
+ if (field1->flags == field2->flags) {
+ /* ERROR - fields are of same parity - what should be done here?
+ * perhaps deinterlace the tip field and start again? */
+ GST_ERROR_OBJECT (self, "Telecine mixed with fields of same parity!");
}
- } else if (interlacing_method == GST_DEINTERLACE_INTERLACED || (hl_no_lock
- && interlacing_method == GST_DEINTERLACE_TELECINE && same_buffer
- && !GST_BUFFER_FLAG_IS_SET (field1->buf,
- GST_VIDEO_BUFFER_PROGRESSIVE))) {
+ GST_DEBUG_OBJECT (self,
+ "Frame type: Telecine Mixed; weaving tip two fields into a frame");
+ /* set method to WEAVE */
+ gst_deinterlace_set_method (self, GST_DEINTERLACE_WEAVE);
+ } else {
+ /* This is the final catch-all case that applies the selected deinterlacing
+ * method. At this point the fields to be processed are either definitely
+ * interlaced or we do not yet know that we have a telecine pattern lock
+ * and so the best we can do is to deinterlace the fields. */
gst_deinterlace_set_method (self, self->user_set_method_id);
fields_required = gst_deinterlace_method_get_fields_required (self->method);
if (flushing && self->history_count < fields_required) {
@@ -1629,50 +1689,13 @@
GST_DEBUG_OBJECT (self,
"Frame type: Interlaced; deinterlacing using %s method",
methods_types[self->method_id].value_nick);
- } else {
- GstBuffer *field1_buf;
-
- /* progressive */
- fields_required = 2;
-
- /* Not enough fields in the history */
- if (!flushing && self->history_count < fields_required) {
- GST_DEBUG_OBJECT (self, "Need more fields (have %d, need %d)",
- self->history_count, self->cur_field_idx + fields_required);
- goto need_more;
- }
-
- field2 = &self->field_history[self->history_count - 2];
- if (GST_BUFFER_DATA (field1->buf) != GST_BUFFER_DATA (field2->buf)) {
- /* ERROR - next two fields in field history are not one progressive buffer - weave? */
- GST_ERROR_OBJECT (self,
- "Progressive buffer but two fields at tip aren't in the same buffer!");
- }
-
- GST_DEBUG_OBJECT (self,
- "Frame type: Progressive; pushing buffer as a frame");
- /* pop and push */
- self->cur_field_idx--;
- field1_buf = gst_deinterlace_pop_history (self);
- /* field2 is the same buffer as field1, but we need to remove it from the
- * history anyway */
- self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
- GST_DEBUG_OBJECT (self,
- "[OUT] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
- GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (field1_buf)),
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (field1_buf) +
- GST_BUFFER_DURATION (field1_buf)));
- return gst_pad_push (self->srcpad, field1_buf);
}
if (!flushing && self->cur_field_idx < 1) {
goto need_more;
}
- if (self->fields == GST_DEINTERLACE_ALL
- || interlacing_method == GST_DEINTERLACE_TELECINE)
+ if (self->fields == GST_DEINTERLACE_ALL || IS_TELECINE (interlacing_mode))
GST_DEBUG_OBJECT (self, "All fields");
else if (self->fields == GST_DEINTERLACE_TF)
GST_DEBUG_OBJECT (self, "Top fields");
@@ -1681,17 +1704,17 @@
if ((self->field_history[self->cur_field_idx].flags == PICTURE_INTERLACED_TOP
&& (self->fields == GST_DEINTERLACE_TF
- || interlacing_method == GST_DEINTERLACE_TELECINE))
+ || IS_TELECINE (interlacing_mode)))
|| self->fields == GST_DEINTERLACE_ALL) {
GST_DEBUG_OBJECT (self, "deinterlacing top field");
/* create new buffer */
- ret =
- gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
- self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
- if (ret != GST_FLOW_OK)
- return ret;
+ outbuf = gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo), NULL); // FIXME: pad_alloc_buffer
+ if (outbuf == NULL)
+ return GST_FLOW_ERROR; // FIXME: report proper out of mem error?
+
+#if 0
if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf) &&
!gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
GST_BUFFER_CAPS (outbuf))) {
@@ -1700,22 +1723,23 @@
self->request_caps);
gst_buffer_unref (outbuf);
- outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+ outbuf =
+ gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo),
+ NULL);
if (!outbuf)
return GST_FLOW_ERROR;
-
- gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
}
+#endif
g_return_val_if_fail (self->history_count >=
1 + gst_deinterlace_method_get_latency (self->method), GST_FLOW_ERROR);
buf =
self->field_history[self->history_count - 1 -
- gst_deinterlace_method_get_latency (self->method)].buf;
+ gst_deinterlace_method_get_latency (self->method)].frame->buffer;
- if (interlacing_method != GST_DEINTERLACE_TELECINE) {
+ if (!IS_TELECINE (interlacing_mode)) {
timestamp = GST_BUFFER_TIMESTAMP (buf);
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
@@ -1723,22 +1747,28 @@
GST_BUFFER_DURATION (outbuf) = self->field_duration;
else
GST_BUFFER_DURATION (outbuf) = 2 * self->field_duration;
+ GST_DEBUG_OBJECT (self,
+ "[ADJUST] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf) +
+ GST_BUFFER_DURATION (outbuf)));
} else {
GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
}
/* Check if we need to drop the frame because of QoS */
- if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+ if (!gst_deinterlace_do_qos (self, buf)) {
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
gst_buffer_unref (outbuf);
outbuf = NULL;
ret = GST_FLOW_OK;
} else {
if (self->cur_field_idx < 0 && flushing) {
if (self->history_count == 1) {
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
goto need_more;
}
self->cur_field_idx++;
@@ -1750,16 +1780,23 @@
goto need_more;
}
+ /* map the frame so the deinterlace methods can write the data to the
+ * correct memory locations */
+ outframe =
+ gst_video_frame_new_and_map (&self->vinfo, outbuf, GST_MAP_WRITE);
+
/* do magic calculus */
gst_deinterlace_method_deinterlace_frame (self->method,
- self->field_history, self->history_count, outbuf,
+ self->field_history, self->history_count, outframe,
self->cur_field_idx);
+ gst_video_frame_unmap_and_free (outframe);
+
self->cur_field_idx--;
if (self->cur_field_idx + 1 +
gst_deinterlace_method_get_latency (self->method)
< self->history_count || flushing) {
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
}
if (gst_deinterlace_clip_buffer (self, outbuf)) {
@@ -1778,14 +1815,14 @@
outbuf = NULL;
if (ret != GST_FLOW_OK)
return ret;
- if (interlacing_method == GST_DEINTERLACE_TELECINE
+ if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED
&& self->method_id == GST_DEINTERLACE_WEAVE) {
/* pop off the second field */
GST_DEBUG_OBJECT (self, "Removing unused field (count: %d)",
self->history_count);
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
- interlacing_method = GST_DEINTERLACE_INTERLACED;
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
+ interlacing_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
return ret;
}
}
@@ -1798,10 +1835,10 @@
/* no calculation done: remove excess field */
else if (self->field_history[self->cur_field_idx].flags ==
PICTURE_INTERLACED_TOP && (self->fields == GST_DEINTERLACE_BF
- && interlacing_method != GST_DEINTERLACE_TELECINE)) {
+ && !IS_TELECINE (interlacing_mode))) {
GST_DEBUG_OBJECT (self, "Removing unused top field");
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
if (flush_one && !self->drop_orphans) {
GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
@@ -1822,17 +1859,17 @@
/* deinterlace bottom_field */
if ((self->field_history[self->cur_field_idx].flags ==
PICTURE_INTERLACED_BOTTOM && (self->fields == GST_DEINTERLACE_BF
- || interlacing_method == GST_DEINTERLACE_TELECINE))
+ || IS_TELECINE (interlacing_mode)))
|| self->fields == GST_DEINTERLACE_ALL) {
GST_DEBUG_OBJECT (self, "deinterlacing bottom field");
/* create new buffer */
- ret =
- gst_pad_alloc_buffer (self->srcpad, GST_BUFFER_OFFSET_NONE,
- self->frame_size, GST_PAD_CAPS (self->srcpad), &outbuf);
- if (ret != GST_FLOW_OK)
- return ret;
+ outbuf = gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo), NULL); // FIXME: pad_alloc_buffer
+ if (outbuf == NULL)
+ return GST_FLOW_ERROR; // FIXME: report out of mem error?
+
+#if 0
if (GST_PAD_CAPS (self->srcpad) != GST_BUFFER_CAPS (outbuf) &&
!gst_caps_is_equal (GST_PAD_CAPS (self->srcpad),
GST_BUFFER_CAPS (outbuf))) {
@@ -1841,51 +1878,69 @@
self->request_caps);
gst_buffer_unref (outbuf);
- outbuf = gst_buffer_try_new_and_alloc (self->frame_size);
+ outbuf =
+ gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&self->vinfo),
+ NULL);
if (!outbuf)
return GST_FLOW_ERROR;
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (self->srcpad));
}
+#endif
g_return_val_if_fail (self->history_count - 1 -
gst_deinterlace_method_get_latency (self->method) >= 0, GST_FLOW_ERROR);
buf =
self->field_history[self->history_count - 1 -
- gst_deinterlace_method_get_latency (self->method)].buf;
- if (interlacing_method != GST_DEINTERLACE_TELECINE) {
+ gst_deinterlace_method_get_latency (self->method)].frame->buffer;
+ if (!IS_TELECINE (interlacing_mode)) {
timestamp = GST_BUFFER_TIMESTAMP (buf);
- GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
- if (self->fields == GST_DEINTERLACE_ALL)
+ if (self->fields == GST_DEINTERLACE_ALL) {
+ GST_BUFFER_TIMESTAMP (outbuf) = timestamp + self->field_duration;
GST_BUFFER_DURATION (outbuf) = self->field_duration;
- else
+ } else {
+ GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
GST_BUFFER_DURATION (outbuf) = 2 * self->field_duration;
+ }
+ GST_DEBUG_OBJECT (self,
+ "[ADJUST] ts %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", end %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf) +
+ GST_BUFFER_DURATION (outbuf)));
} else {
GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
}
/* Check if we need to drop the frame because of QoS */
- if (!gst_deinterlace_do_qos (self, GST_BUFFER_TIMESTAMP (buf))) {
+ if (!gst_deinterlace_do_qos (self, buf)) {
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
gst_buffer_unref (outbuf);
outbuf = NULL;
ret = GST_FLOW_OK;
} else {
+ /* map the frame so the deinterlace methods can write the data to the
+ * correct memory locations */
+ outframe =
+ gst_video_frame_new_and_map (&self->vinfo, outbuf, GST_MAP_WRITE);
+
/* do magic calculus */
gst_deinterlace_method_deinterlace_frame (self->method,
- self->field_history, self->history_count, outbuf,
+ self->field_history, self->history_count, outframe,
self->cur_field_idx);
+ gst_video_frame_unmap_and_free (outframe);
+
self->cur_field_idx--;
if (self->cur_field_idx + 1 +
gst_deinterlace_method_get_latency (self->method)
< self->history_count) {
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
}
if (gst_deinterlace_clip_buffer (self, outbuf)) {
@@ -1904,14 +1959,14 @@
outbuf = NULL;
if (ret != GST_FLOW_OK)
return ret;
- if (interlacing_method == GST_DEINTERLACE_TELECINE
+ if (interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED
&& self->method_id == GST_DEINTERLACE_WEAVE) {
/* pop off the second field */
GST_DEBUG_OBJECT (self, "Removing unused field (count: %d)",
self->history_count);
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
- interlacing_method = GST_DEINTERLACE_INTERLACED;
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
+ interlacing_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED;
return ret;
}
}
@@ -1924,10 +1979,10 @@
/* no calculation done: remove excess field */
else if (self->field_history[self->cur_field_idx].flags ==
PICTURE_INTERLACED_BOTTOM && (self->fields == GST_DEINTERLACE_TF
- && interlacing_method != GST_DEINTERLACE_TELECINE)) {
+ && !IS_TELECINE (interlacing_mode))) {
GST_DEBUG_OBJECT (self, "Removing unused bottom field");
self->cur_field_idx--;
- gst_buffer_unref (gst_deinterlace_pop_history (self));
+ gst_video_frame_unmap_and_free (gst_deinterlace_pop_history (self));
if (flush_one && !self->drop_orphans) {
GST_DEBUG_OBJECT (self, "Orphan field deinterlaced - reconfiguring");
@@ -1973,13 +2028,15 @@
}
static GstFlowReturn
-gst_deinterlace_chain (GstPad * pad, GstBuffer * buf)
+gst_deinterlace_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstDeinterlace *self = GST_DEINTERLACE (GST_PAD_PARENT (pad));
+ GstDeinterlace *self = GST_DEINTERLACE (parent);
GstFlowReturn ret = GST_FLOW_OK;
GST_OBJECT_LOCK (self);
- if (self->reconfigure) {
+ if (self->reconfigure) { /* FIXME: reconfigure should probably work differently */
+ GstCaps *caps;
+
if (self->new_fields != -1)
self->fields = self->new_fields;
if (self->new_mode != -1)
@@ -1989,8 +2046,11 @@
self->reconfigure = FALSE;
GST_OBJECT_UNLOCK (self);
- if (GST_PAD_CAPS (self->srcpad))
- gst_deinterlace_setcaps (self->sinkpad, GST_PAD_CAPS (self->sinkpad));
+ caps = gst_pad_get_current_caps (self->srcpad);
+ if (caps != NULL) {
+ gst_deinterlace_setcaps (self, self->sinkpad, caps); // FIXME
+ gst_caps_unref (caps);
+ }
} else {
GST_OBJECT_UNLOCK (self);
}
@@ -2083,36 +2143,38 @@
return TRUE;
}
+/* FIXME: use filter in getcaps */
static GstCaps *
-gst_deinterlace_getcaps (GstPad * pad)
+gst_deinterlace_getcaps (GstDeinterlace * self, GstPad * pad, GstCaps * filter)
{
GstCaps *ret;
- GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
GstPad *otherpad;
gint len;
- const GstCaps *ourcaps;
+ GstCaps *ourcaps;
GstCaps *peercaps;
otherpad = (pad == self->srcpad) ? self->sinkpad : self->srcpad;
ourcaps = gst_pad_get_pad_template_caps (pad);
- peercaps = gst_pad_peer_get_caps (otherpad);
+ peercaps = gst_pad_peer_query_caps (otherpad, NULL);
if (peercaps) {
GST_DEBUG_OBJECT (pad, "Peer has caps %" GST_PTR_FORMAT, peercaps);
- ret = gst_caps_intersect (ourcaps, peercaps);
+ ret = gst_caps_make_writable (gst_caps_intersect (ourcaps, peercaps));
gst_caps_unref (peercaps);
+ gst_caps_unref (ourcaps);
} else {
- ret = gst_caps_copy (ourcaps);
+ ret = gst_caps_make_writable (ourcaps);
}
for (len = gst_caps_get_size (ret); len > 0; len--) {
GstStructure *s = gst_caps_get_structure (ret, len - 1);
if (pad == self->sinkpad || self->passthrough)
- gst_structure_remove_field (s, "interlaced");
+ gst_structure_remove_field (s, "interlace-mode");
else
- gst_structure_set (s, "interlaced", G_TYPE_BOOLEAN, FALSE, NULL);
+ gst_structure_set (s, "interlace-mode", G_TYPE_STRING, "progressive",
+ NULL);
if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
const GValue *val;
@@ -2214,8 +2276,6 @@
GST_DEBUG_OBJECT (pad, "Returning caps %" GST_PTR_FORMAT, ret);
- gst_object_unref (self);
-
return ret;
error:
@@ -2225,12 +2285,12 @@
}
static gboolean
-gst_deinterlace_setcaps (GstPad * pad, GstCaps * caps)
+gst_deinterlace_setcaps (GstDeinterlace * self, GstPad * pad, GstCaps * caps)
{
gboolean res = TRUE;
- GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
GstCaps *srccaps;
- GstDeinterlaceInterlacingMethod interlacing_method;
+ GstVideoInterlaceMode interlacing_mode;
+ gint fps_n, fps_d;
if (self->locking != GST_DEINTERLACE_LOCKING_NONE) {
if (self->low_latency == -1)
@@ -2248,78 +2308,75 @@
}
}
- res =
- gst_video_format_parse_caps (caps, &self->format, &self->width,
- &self->height);
- res &= gst_video_parse_caps_framerate (caps, &self->fps_n, &self->fps_d);
- if (pad == self->sinkpad)
- res &= gst_video_format_parse_caps_interlaced (caps, &self->interlaced);
+ if (!gst_video_info_from_caps (&self->vinfo, caps))
+ goto invalid_caps;
+
+ if (GST_VIDEO_INFO_FPS_N (&self->vinfo) == 0 ||
+ GST_VIDEO_INFO_FLAG_IS_SET (&self->vinfo, GST_VIDEO_FLAG_VARIABLE_FPS))
+ goto no_framerate;
+
+ fps_n = GST_VIDEO_INFO_FPS_N (&self->vinfo);
+ fps_d = GST_VIDEO_INFO_FPS_D (&self->vinfo);
+
if (!res)
goto invalid_caps;
gst_deinterlace_update_passthrough (self);
- interlacing_method = gst_deinterlace_get_interlacing_method (caps);
+ interlacing_mode = GST_VIDEO_INFO_INTERLACE_MODE (&self->vinfo);
if (self->pattern_lock) {
srccaps = gst_caps_copy (caps);
if (self->pattern != -1
- && G_UNLIKELY (!gst_util_fraction_multiply (self->fps_n, self->fps_d,
+ && G_UNLIKELY (!gst_util_fraction_multiply (fps_n, fps_d,
telecine_patterns[self->pattern].ratio_n,
- telecine_patterns[self->pattern].ratio_d, &self->fps_n,
- &self->fps_d)))
+ telecine_patterns[self->pattern].ratio_d, &fps_n, &fps_d)))
GST_ERROR_OBJECT (self,
"Multiplying the framerate by the telecine pattern ratio overflowed!");
- gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, self->fps_n,
- self->fps_d, NULL);
- } else if (self->low_latency > 0) {
- if (interlacing_method == GST_DEINTERLACE_TELECINE) {
- /* for initial buffers of a telecine pattern, until there is a lock we
- * we output naïvely adjusted timestamps */
- srccaps = gst_caps_copy (caps);
- gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
- } else if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
- gint fps_n = self->fps_n, fps_d = self->fps_d;
-
- if (!gst_fraction_double (&fps_n, &fps_d, FALSE))
- goto invalid_caps;
-
- srccaps = gst_caps_copy (caps);
-
- gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
- fps_d, NULL);
- } else {
- srccaps = gst_caps_ref (caps);
- }
- } else {
+ gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
+ fps_d, NULL);
+ } else if (self->locking == GST_DEINTERLACE_LOCKING_ACTIVE
+ || self->low_latency == 0) {
/* in high latency pattern locking mode if we don't have a pattern lock,
* the sink pad caps are the best we know */
srccaps = gst_caps_ref (caps);
+ } else if (self->low_latency > 0
+ && interlacing_mode == GST_VIDEO_INTERLACE_MODE_MIXED
+ && self->pattern == -1) {
+ /* for initial buffers of a telecine pattern, until there is a lock we
+ * we output naïvely adjusted timestamps in low-latency pattern locking
+ * mode */
+ srccaps = gst_caps_copy (caps);
+ gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+ } else if (!self->passthrough && self->fields == GST_DEINTERLACE_ALL) {
+ if (!gst_fraction_double (&fps_n, &fps_d, FALSE))
+ goto invalid_caps;
+
+ srccaps = gst_caps_copy (caps);
+
+ gst_caps_set_simple (srccaps, "framerate", GST_TYPE_FRACTION, fps_n,
+ fps_d, NULL);
+ } else {
+ srccaps = gst_caps_ref (caps);
}
if (self->mode != GST_DEINTERLACE_MODE_DISABLED) {
srccaps = gst_caps_make_writable (srccaps);
- gst_structure_remove_field (gst_caps_get_structure (srccaps, 0),
- "interlacing-method");
- gst_caps_set_simple (srccaps, "interlaced", G_TYPE_BOOLEAN, FALSE, NULL);
+ gst_caps_set_simple (srccaps, "interlace-method", G_TYPE_STRING,
+ "progressive", NULL);
}
if (!gst_pad_set_caps (self->srcpad, srccaps))
goto caps_not_accepted;
- self->frame_size =
- gst_video_format_get_size (self->format, self->width, self->height);
-
- if (G_LIKELY (self->fps_n != 0)) {
- self->field_duration =
- gst_util_uint64_scale (GST_SECOND, self->fps_d, 2 * self->fps_n);
+ if (fps_n != 0) {
+ self->field_duration = gst_util_uint64_scale (GST_SECOND, fps_d, 2 * fps_n);
} else {
self->field_duration = 0;
}
gst_deinterlace_set_method (self, self->method_id);
- gst_deinterlace_method_setup (self->method, self->format, self->width,
- self->height);
+ gst_deinterlace_method_setup (self->method, &self->vinfo);
GST_DEBUG_OBJECT (pad, "Sink caps: %" GST_PTR_FORMAT, caps);
GST_DEBUG_OBJECT (pad, "Src caps: %" GST_PTR_FORMAT, srccaps);
@@ -2328,7 +2385,6 @@
done:
- gst_object_unref (self);
return res;
invalid_caps:
@@ -2336,6 +2392,11 @@
GST_ERROR_OBJECT (pad, "Invalid caps: %" GST_PTR_FORMAT, caps);
goto done;
+no_framerate:
+ res = FALSE;
+ GST_ERROR_OBJECT (pad, "No framerate in caps: %" GST_PTR_FORMAT, caps);
+ goto done;
+
caps_not_accepted:
res = FALSE;
GST_ERROR_OBJECT (pad, "Caps not accepted: %" GST_PTR_FORMAT, srccaps);
@@ -2344,36 +2405,42 @@
}
static gboolean
-gst_deinterlace_sink_event (GstPad * pad, GstEvent * event)
+gst_deinterlace_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = TRUE;
- GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+ GstDeinterlace *self = GST_DEINTERLACE (parent);
GST_LOG_OBJECT (pad, "received %s event: %" GST_PTR_FORMAT,
GST_EVENT_TYPE_NAME (event), event);
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
{
- GstFormat fmt;
- gboolean is_update;
- gint64 start, end, base;
- gdouble rate, applied_rate;
+ GstCaps *caps = NULL;
- gst_event_parse_new_segment_full (event, &is_update, &rate,
- &applied_rate, &fmt, &start, &end, &base);
+ gst_event_parse_caps (event, &caps);
+ res = gst_deinterlace_setcaps (self, pad, caps);
+ gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_SEGMENT:
+ {
+ const GstSegment *segment;
+
+ gst_event_parse_segment (event, &segment);
gst_deinterlace_reset_qos (self);
gst_deinterlace_reset_history (self, FALSE);
- if (fmt == GST_FORMAT_TIME) {
+ if (segment->format == GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (pad,
- "Got NEWSEGMENT event in GST_FORMAT_TIME, passing on (%"
- GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")", GST_TIME_ARGS (start),
- GST_TIME_ARGS (end));
- gst_segment_set_newsegment_full (&self->segment, is_update, rate,
- applied_rate, fmt, start, end, base);
+ "Got SEGMENT event in TIME format, passing on (%"
+ GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")",
+ GST_TIME_ARGS (segment->start), GST_TIME_ARGS (segment->stop));
+ gst_segment_copy_into (segment, &self->segment);
} else {
+ GST_WARNING_OBJECT (pad, "Got SEGMENT event in %s format",
+ gst_format_get_name (segment->format));
gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
}
@@ -2428,19 +2495,27 @@
break;
}
- gst_object_unref (self);
return res;
}
static gboolean
-gst_deinterlace_sink_query (GstPad * pad, GstQuery * query)
+gst_deinterlace_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+ GstDeinterlace *self = GST_DEINTERLACE (parent);
gboolean res = FALSE;
GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query));
switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:{
+ GstCaps *filter, *caps;
+
+ gst_query_parse_caps (query, &filter);
+ caps = gst_deinterlace_getcaps (self, pad, filter);
+ gst_query_set_caps_result (query, caps);
+ res = TRUE;
+ break;
+ }
default:{
GstPad *peer = gst_pad_get_peer (self->srcpad);
@@ -2454,7 +2529,6 @@
}
}
- gst_object_unref (self);
return res;
}
@@ -2494,9 +2568,9 @@
}
static gboolean
-gst_deinterlace_src_event (GstPad * pad, GstEvent * event)
+gst_deinterlace_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+ GstDeinterlace *self = GST_DEINTERLACE (parent);
gboolean res;
GST_DEBUG_OBJECT (pad, "received %s event", GST_EVENT_TYPE_NAME (event));
@@ -2505,9 +2579,10 @@
case GST_EVENT_QOS:{
GstClockTimeDiff diff;
GstClockTime timestamp;
+ GstQOSType type;
gdouble proportion;
- gst_event_parse_qos (event, &proportion, &diff, ×tamp);
+ gst_event_parse_qos (event, &type, &proportion, &diff, ×tamp);
gst_deinterlace_update_qos (self, proportion, diff, timestamp);
}
@@ -2517,15 +2592,13 @@
break;
}
- gst_object_unref (self);
-
return res;
}
static gboolean
-gst_deinterlace_src_query (GstPad * pad, GstQuery * query)
+gst_deinterlace_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstDeinterlace *self = GST_DEINTERLACE (gst_pad_get_parent (pad));
+ GstDeinterlace *self = GST_DEINTERLACE (parent);
gboolean res = FALSE;
GST_LOG_OBJECT (pad, "%s query", GST_QUERY_TYPE_NAME (query));
@@ -2592,20 +2665,11 @@
}
}
- gst_object_unref (self);
return res;
}
-static const GstQueryType *
-gst_deinterlace_src_query_types (GstPad * pad)
-{
- static const GstQueryType types[] = {
- GST_QUERY_LATENCY,
- GST_QUERY_NONE
- };
- return types;
-}
-
+/* FIXME: buffer alloc */
+#if 0
static GstFlowReturn
gst_deinterlace_alloc_buffer (GstPad * pad, guint64 offset, guint size,
GstCaps * caps, GstBuffer ** buf)
@@ -2673,6 +2737,7 @@
return ret;
}
+#endif
static gboolean
plugin_init (GstPlugin * plugin)
diff --git a/gst/deinterlace/gstdeinterlace.h b/gst/deinterlace/gstdeinterlace.h
index a5a69a3..1c6ef1d 100644
--- a/gst/deinterlace/gstdeinterlace.h
+++ b/gst/deinterlace/gstdeinterlace.h
@@ -24,6 +24,7 @@
#include <gst/gst.h>
#include <gst/video/video.h>
+#include <gst/video/gstvideofilter.h>
#include "gstdeinterlacemethod.h"
@@ -129,11 +130,15 @@
GstDeinterlaceMethods user_set_method_id;
GstDeinterlaceMethod *method;
+ GstVideoInfo vinfo;
+
+#if 0
GstVideoFormat format;
gint width, height; /* frame width & height */
guint frame_size; /* frame size in bytes */
gint fps_n, fps_d; /* frame rate */
gboolean interlaced; /* is input interlaced? */
+#endif
gboolean passthrough;
@@ -162,6 +167,8 @@
/* QoS stuff */
gdouble proportion;
GstClockTime earliest_time;
+ gint64 processed;
+ gint64 dropped;
GstCaps *request_caps;
diff --git a/gst/deinterlace/gstdeinterlacemethod.c b/gst/deinterlace/gstdeinterlacemethod.c
index 9927868..e78aebc 100644
--- a/gst/deinterlace/gstdeinterlacemethod.c
+++ b/gst/deinterlace/gstdeinterlacemethod.c
@@ -95,40 +95,36 @@
}
void
-gst_deinterlace_method_setup (GstDeinterlaceMethod * self,
- GstVideoFormat format, gint width, gint height)
+gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoInfo * vinfo)
{
GstDeinterlaceMethodClass *klass = GST_DEINTERLACE_METHOD_GET_CLASS (self);
- klass->setup (self, format, width, height);
+ klass->setup (self, vinfo);
}
static void
gst_deinterlace_method_setup_impl (GstDeinterlaceMethod * self,
- GstVideoFormat format, gint width, gint height)
+ GstVideoInfo * vinfo)
{
gint i;
GstDeinterlaceMethodClass *klass = GST_DEINTERLACE_METHOD_GET_CLASS (self);
- self->format = format;
- self->frame_width = width;
- self->frame_height = height;
+ self->vinfo = vinfo;
self->deinterlace_frame = NULL;
- if (format == GST_VIDEO_FORMAT_UNKNOWN)
+ if (GST_VIDEO_INFO_FORMAT (self->vinfo) == GST_VIDEO_FORMAT_UNKNOWN)
return;
for (i = 0; i < 4; i++) {
- self->width[i] = gst_video_format_get_component_width (format, i, width);
- self->height[i] = gst_video_format_get_component_height (format, i, height);
- self->offset[i] =
- gst_video_format_get_component_offset (format, i, width, height);
- self->row_stride[i] = gst_video_format_get_row_stride (format, i, width);
- self->pixel_stride[i] = gst_video_format_get_pixel_stride (format, i);
+ self->width[i] = GST_VIDEO_INFO_COMP_WIDTH (vinfo, i);
+ self->height[i] = GST_VIDEO_INFO_COMP_HEIGHT (vinfo, i);
+ self->offset[i] = GST_VIDEO_INFO_COMP_OFFSET (vinfo, i);
+ self->row_stride[i] = GST_VIDEO_INFO_COMP_STRIDE (vinfo, i);
+ self->pixel_stride[i] = GST_VIDEO_INFO_COMP_PSTRIDE (vinfo, i);
}
- switch (format) {
+ switch (GST_VIDEO_INFO_FORMAT (self->vinfo)) {
case GST_VIDEO_FORMAT_YUY2:
self->deinterlace_frame = klass->deinterlace_frame_yuy2;
break;
@@ -200,16 +196,17 @@
static void
gst_deinterlace_method_init (GstDeinterlaceMethod * self)
{
- self->format = GST_VIDEO_FORMAT_UNKNOWN;
+ self->vinfo = NULL;
}
void
gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self,
const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf, int cur_field_idx)
+ GstVideoFrame * outframe, int cur_field_idx)
{
g_assert (self->deinterlace_frame != NULL);
- self->deinterlace_frame (self, history, history_count, outbuf, cur_field_idx);
+ self->deinterlace_frame (self, history, history_count, outframe,
+ cur_field_idx);
}
gint
@@ -318,7 +315,7 @@
static void
gst_deinterlace_simple_method_deinterlace_frame_packed (GstDeinterlaceMethod *
method, const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf, gint cur_field_idx)
+ GstVideoFrame * outframe, gint cur_field_idx)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
@@ -327,31 +324,32 @@
const guint8 *field0, *field1, *field2, *fieldp;
guint cur_field_flags = history[cur_field_idx].flags;
gint i;
- gint frame_height = self->parent.frame_height;
+ gint frame_height = GST_VIDEO_INFO_HEIGHT (self->parent.vinfo);
gint stride = self->parent.row_stride[0];
g_assert (self->interpolate_scanline_packed != NULL);
g_assert (self->copy_scanline_packed != NULL);
if (cur_field_idx > 0) {
- fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf);
+ fieldp = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 1].frame, 0);
} else {
fieldp = NULL;
}
- dest = GST_BUFFER_DATA (outbuf);
- field0 = GST_BUFFER_DATA (history[cur_field_idx].buf);
+ dest = GST_VIDEO_FRAME_COMP_DATA (outframe, 0);
+
+ field0 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx].frame, 0);
g_assert (dm_class->fields_required <= 4);
if (cur_field_idx + 1 < history_count) {
- field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf);
+ field1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx + 1].frame, 0);
} else {
field1 = NULL;
}
if (cur_field_idx + 2 < history_count) {
- field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf);
+ field2 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx + 2].frame, 0);
} else {
field2 = NULL;
}
@@ -509,14 +507,14 @@
static void
gst_deinterlace_simple_method_deinterlace_frame_planar (GstDeinterlaceMethod *
method, const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf, gint cur_field_idx)
+ GstVideoFrame * outframe, gint cur_field_idx)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
guint8 *out;
const guint8 *field0, *field1, *field2, *fieldp;
guint cur_field_flags = history[cur_field_idx].flags;
- gint i, offset;
+ gint i;
GstDeinterlaceSimpleMethodFunction copy_scanline;
GstDeinterlaceSimpleMethodFunction interpolate_scanline;
@@ -528,29 +526,28 @@
g_assert (self->copy_scanline_planar[2] != NULL);
for (i = 0; i < 3; i++) {
- offset = self->parent.offset[i];
copy_scanline = self->copy_scanline_planar[i];
interpolate_scanline = self->interpolate_scanline_planar[i];
- out = GST_BUFFER_DATA (outbuf) + offset;
+ out = GST_VIDEO_FRAME_PLANE_DATA (outframe, i);
fieldp = NULL;
if (cur_field_idx > 0) {
- fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + offset;
+ fieldp = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 1].frame, i);
}
- field0 = GST_BUFFER_DATA (history[cur_field_idx].buf) + offset;
+ field0 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx].frame, i);
g_assert (dm_class->fields_required <= 4);
field1 = NULL;
if (cur_field_idx + 1 < history_count) {
- field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf) + offset;
+ field1 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 1].frame, i);
}
field2 = NULL;
if (cur_field_idx + 2 < history_count) {
- field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf) + offset;
+ field2 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 2].frame, i);
}
gst_deinterlace_simple_method_deinterlace_frame_planar_plane (self, out,
@@ -562,40 +559,38 @@
static void
gst_deinterlace_simple_method_deinterlace_frame_nv12 (GstDeinterlaceMethod *
method, const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf, gint cur_field_idx)
+ GstVideoFrame * outframe, gint cur_field_idx)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceMethodClass *dm_class = GST_DEINTERLACE_METHOD_GET_CLASS (self);
guint8 *out;
const guint8 *field0, *field1, *field2, *fieldp;
guint cur_field_flags = history[cur_field_idx].flags;
- gint i, offset;
+ gint i;
g_assert (self->interpolate_scanline_packed != NULL);
g_assert (self->copy_scanline_packed != NULL);
for (i = 0; i < 2; i++) {
- offset = self->parent.offset[i];
-
- out = GST_BUFFER_DATA (outbuf) + offset;
+ out = GST_VIDEO_FRAME_PLANE_DATA (outframe, i);
fieldp = NULL;
if (cur_field_idx > 0) {
- fieldp = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + offset;
+ fieldp = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 1].frame, i);
}
- field0 = GST_BUFFER_DATA (history[cur_field_idx].buf) + offset;
+ field0 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx].frame, i);
g_assert (dm_class->fields_required <= 4);
field1 = NULL;
if (cur_field_idx + 1 < history_count) {
- field1 = GST_BUFFER_DATA (history[cur_field_idx + 1].buf) + offset;
+ field1 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 1].frame, i);
}
field2 = NULL;
if (cur_field_idx + 2 < history_count) {
- field2 = GST_BUFFER_DATA (history[cur_field_idx + 2].buf) + offset;
+ field2 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx + 2].frame, i);
}
gst_deinterlace_simple_method_deinterlace_frame_planar_plane (self, out,
@@ -606,15 +601,14 @@
static void
gst_deinterlace_simple_method_setup (GstDeinterlaceMethod * method,
- GstVideoFormat format, gint width, gint height)
+ GstVideoInfo * vinfo)
{
GstDeinterlaceSimpleMethod *self = GST_DEINTERLACE_SIMPLE_METHOD (method);
GstDeinterlaceSimpleMethodClass *klass =
GST_DEINTERLACE_SIMPLE_METHOD_GET_CLASS (self);
GST_DEINTERLACE_METHOD_CLASS
- (gst_deinterlace_simple_method_parent_class)->setup (method, format,
- width, height);
+ (gst_deinterlace_simple_method_parent_class)->setup (method, vinfo);
self->interpolate_scanline_packed = NULL;
self->copy_scanline_packed = NULL;
@@ -626,10 +620,10 @@
self->copy_scanline_planar[1] = NULL;
self->copy_scanline_planar[2] = NULL;
- if (format == GST_VIDEO_FORMAT_UNKNOWN)
+ if (GST_VIDEO_INFO_FORMAT (vinfo) == GST_VIDEO_FORMAT_UNKNOWN)
return;
- switch (format) {
+ switch (GST_VIDEO_INFO_FORMAT (vinfo)) {
case GST_VIDEO_FORMAT_YUY2:
self->interpolate_scanline_packed = klass->interpolate_scanline_yuy2;
self->copy_scanline_packed = klass->copy_scanline_yuy2;
diff --git a/gst/deinterlace/gstdeinterlacemethod.h b/gst/deinterlace/gstdeinterlacemethod.h
index a50ecbd..16d54ba 100644
--- a/gst/deinterlace/gstdeinterlacemethod.h
+++ b/gst/deinterlace/gstdeinterlacemethod.h
@@ -51,8 +51,7 @@
typedef struct
{
- /* pointer to the start of data for this field */
- GstBuffer *buf;
+ GstVideoFrame *frame;
/* see PICTURE_ flags in *.c */
guint flags;
} GstDeinterlaceField;
@@ -63,13 +62,13 @@
typedef void (*GstDeinterlaceMethodDeinterlaceFunction) (
GstDeinterlaceMethod *self, const GstDeinterlaceField *history,
- guint history_count, GstBuffer *outbuf, int cur_field_idx);
+ guint history_count, GstVideoFrame *outframe, int cur_field_idx);
struct _GstDeinterlaceMethod {
GstObject parent;
- GstVideoFormat format;
- gint frame_width, frame_height;
+ GstVideoInfo *vinfo;
+ // FIXME - the stuff below can use vinfo and macros
gint width[4];
gint height[4];
gint offset[4];
@@ -86,7 +85,7 @@
gboolean (*supported) (GstDeinterlaceMethodClass *klass, GstVideoFormat format, gint width, gint height);
- void (*setup) (GstDeinterlaceMethod *self, GstVideoFormat format, gint width, gint height);
+ void (*setup) (GstDeinterlaceMethod *self, GstVideoInfo * vinfo);
GstDeinterlaceMethodDeinterlaceFunction deinterlace_frame_yuy2;
GstDeinterlaceMethodDeinterlaceFunction deinterlace_frame_yvyu;
@@ -113,8 +112,8 @@
GType gst_deinterlace_method_get_type (void);
gboolean gst_deinterlace_method_supported (GType type, GstVideoFormat format, gint width, gint height);
-void gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoFormat format, gint width, gint height);
-void gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self, const GstDeinterlaceField * history, guint history_count, GstBuffer * outbuf,
+void gst_deinterlace_method_setup (GstDeinterlaceMethod * self, GstVideoInfo * vinfo);
+void gst_deinterlace_method_deinterlace_frame (GstDeinterlaceMethod * self, const GstDeinterlaceField * history, guint history_count, GstVideoFrame * outframe,
int cur_field_idx);
gint gst_deinterlace_method_get_fields_required (GstDeinterlaceMethod * self);
gint gst_deinterlace_method_get_latency (GstDeinterlaceMethod * self);
diff --git a/gst/deinterlace/tvtime-dist.c b/gst/deinterlace/tvtime-dist.c
index a278f75..3cd2ba2 100644
--- a/gst/deinterlace/tvtime-dist.c
+++ b/gst/deinterlace/tvtime-dist.c
@@ -326,12 +326,13 @@
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_name (p, "deinterlace_line_vfir");
@@ -380,11 +381,14 @@
ORC_VAR_D1, ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
@@ -394,7 +398,7 @@
ex->arrays[ORC_VAR_S4] = (void *) s4;
ex->arrays[ORC_VAR_S5] = (void *) s5;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
@@ -469,12 +473,13 @@
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_name (p, "deinterlace_line_linear");
@@ -487,18 +492,21 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
ex->arrays[ORC_VAR_S1] = (void *) s1;
ex->arrays[ORC_VAR_S2] = (void *) s2;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
@@ -639,12 +647,13 @@
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_name (p, "deinterlace_line_linear_blend");
@@ -679,11 +688,14 @@
ORC_VAR_D1, ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
@@ -691,7 +703,7 @@
ex->arrays[ORC_VAR_S2] = (void *) s2;
ex->arrays[ORC_VAR_S3] = (void *) s3;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
@@ -922,12 +934,13 @@
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_name (p, "deinterlace_line_greedy");
@@ -1000,11 +1013,14 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
@@ -1014,7 +1030,7 @@
ex->arrays[ORC_VAR_S4] = (void *) s4;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
diff --git a/gst/deinterlace/tvtime/greedyh.c b/gst/deinterlace/tvtime/greedyh.c
index 93da8cd..c6bcdda 100644
--- a/gst/deinterlace/tvtime/greedyh.c
+++ b/gst/deinterlace/tvtime/greedyh.c
@@ -719,7 +719,7 @@
static void
deinterlace_frame_di_greedyh_packed (GstDeinterlaceMethod * method,
const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf, int cur_field_idx)
+ GstVideoFrame * outframe, int cur_field_idx)
{
GstDeinterlaceMethodGreedyH *self = GST_DEINTERLACE_METHOD_GREEDY_H (method);
GstDeinterlaceMethodGreedyHClass *klass =
@@ -727,13 +727,13 @@
gint InfoIsOdd = 0;
gint Line;
gint RowStride = method->row_stride[0];
- gint FieldHeight = method->frame_height / 2;
+ gint FieldHeight = GST_VIDEO_INFO_HEIGHT (method->vinfo) / 2;
gint Pitch = method->row_stride[0] * 2;
const guint8 *L1; // ptr to Line1, of 3
const guint8 *L2; // ptr to Line2, the weave line
const guint8 *L3; // ptr to Line3
const guint8 *L2P; // ptr to prev Line2
- guint8 *Dest = GST_BUFFER_DATA (outbuf);
+ guint8 *Dest = GST_VIDEO_FRAME_COMP_DATA (outframe, 0);
ScanlineFunction scanline;
if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
@@ -742,10 +742,9 @@
backup_method = g_object_new (gst_deinterlace_method_linear_get_type (),
NULL);
- gst_deinterlace_method_setup (backup_method, method->format,
- method->frame_width, method->frame_height);
+ gst_deinterlace_method_setup (backup_method, method->vinfo);
gst_deinterlace_method_deinterlace_frame (backup_method,
- history, history_count, outbuf, cur_field_idx);
+ history, history_count, outframe, cur_field_idx);
g_object_unref (backup_method);
return;
@@ -753,7 +752,7 @@
cur_field_idx += 2;
- switch (method->format) {
+ switch (GST_VIDEO_INFO_FORMAT (method->vinfo)) {
case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_YVYU:
scanline = klass->scanline_yuy2;
@@ -775,16 +774,16 @@
if (history[cur_field_idx - 1].flags == PICTURE_INTERLACED_BOTTOM) {
InfoIsOdd = 1;
- L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf);
+ L1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 2].frame, 0);
if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
L1 += RowStride;
- L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf);
+ L2 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 1].frame, 0);
if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
L2 += RowStride;
L3 = L1 + Pitch;
- L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf);
+ L2P = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 3].frame, 0);
if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
L2P += RowStride;
@@ -793,16 +792,19 @@
Dest += RowStride;
} else {
InfoIsOdd = 0;
- L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf);
+ L1 = GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 2].frame, 0);
if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
L1 += RowStride;
- L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + Pitch;
+ L2 = (guint8 *) GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx -
+ 1].frame, 0) + Pitch;
if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
L2 += RowStride;
L3 = L1 + Pitch;
- L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf) + Pitch;
+ L2P =
+ (guint8 *) GST_VIDEO_FRAME_COMP_DATA (history[cur_field_idx - 3].frame,
+ 0) + Pitch;
if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
L2P += RowStride;
@@ -875,7 +877,7 @@
static void
deinterlace_frame_di_greedyh_planar (GstDeinterlaceMethod * method,
const GstDeinterlaceField * history, guint history_count,
- GstBuffer * outbuf, int cur_field_idx)
+ GstVideoFrame * outframe, int cur_field_idx)
{
GstDeinterlaceMethodGreedyH *self = GST_DEINTERLACE_METHOD_GREEDY_H (method);
GstDeinterlaceMethodGreedyHClass *klass =
@@ -890,7 +892,6 @@
const guint8 *L2P; // ptr to prev Line2
guint8 *Dest;
gint i;
- gint Offset;
ScanlineFunction scanline;
if (cur_field_idx + 2 > history_count || cur_field_idx < 1) {
@@ -899,10 +900,9 @@
backup_method = g_object_new (gst_deinterlace_method_linear_get_type (),
NULL);
- gst_deinterlace_method_setup (backup_method, method->format,
- method->frame_width, method->frame_height);
+ gst_deinterlace_method_setup (backup_method, method->vinfo);
gst_deinterlace_method_deinterlace_frame (backup_method,
- history, history_count, outbuf, cur_field_idx);
+ history, history_count, outframe, cur_field_idx);
g_object_unref (backup_method);
return;
@@ -911,8 +911,6 @@
cur_field_idx += 2;
for (i = 0; i < 3; i++) {
- Offset = method->offset[i];
-
InfoIsOdd = (history[cur_field_idx - 1].flags == PICTURE_INTERLACED_BOTTOM);
RowStride = method->row_stride[i];
FieldHeight = method->height[i] / 2;
@@ -923,18 +921,18 @@
else
scanline = klass->scanline_planar_uv;
- Dest = GST_BUFFER_DATA (outbuf) + Offset;
+ Dest = GST_VIDEO_FRAME_PLANE_DATA (outframe, i);
- L1 = GST_BUFFER_DATA (history[cur_field_idx - 2].buf) + Offset;
+ L1 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 2].frame, i);
if (history[cur_field_idx - 2].flags & PICTURE_INTERLACED_BOTTOM)
L1 += RowStride;
- L2 = GST_BUFFER_DATA (history[cur_field_idx - 1].buf) + Offset;
+ L2 = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 1].frame, i);
if (history[cur_field_idx - 1].flags & PICTURE_INTERLACED_BOTTOM)
L2 += RowStride;
L3 = L1 + Pitch;
- L2P = GST_BUFFER_DATA (history[cur_field_idx - 3].buf) + Offset;
+ L2P = GST_VIDEO_FRAME_PLANE_DATA (history[cur_field_idx - 3].frame, i);
if (history[cur_field_idx - 3].flags & PICTURE_INTERLACED_BOTTOM)
L2P += RowStride;
diff --git a/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc b/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
index f8ffe1e..9dd0680 100644
--- a/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
+++ b/gst/deinterlace/tvtime/tomsmocomp/TomsMoCompAll.inc
@@ -63,7 +63,7 @@
static void FUNCT_NAME(GstDeinterlaceMethod *d_method,
const GstDeinterlaceField* history, guint history_count,
- GstBuffer *outbuf, int cur_field_idx)
+ GstVideoFrame *outframe, int cur_field_idx)
{
GstDeinterlaceMethodTomsMoComp *self = GST_DEINTERLACE_METHOD_TOMSMOCOMP (d_method);
glong SearchEffort = self->search_effort;
@@ -86,10 +86,9 @@
backup_method = g_object_new (gst_deinterlace_method_linear_get_type(),
NULL);
- gst_deinterlace_method_setup (backup_method, d_method->format,
- d_method->frame_width, d_method->frame_height);
+ gst_deinterlace_method_setup (backup_method, d_method->vinfo);
gst_deinterlace_method_deinterlace_frame (backup_method,
- history, history_count, outbuf, cur_field_idx);
+ history, history_count, outframe, cur_field_idx);
g_object_unref (backup_method);
return;
@@ -99,18 +98,18 @@
src_pitch = self->parent.row_stride[0]*2;
dst_pitch = self->parent.row_stride[0];
rowsize = self->parent.row_stride[0];
- FldHeight = self->parent.frame_height / 2;
+ FldHeight = GST_VIDEO_INFO_HEIGHT (self->parent.vinfo) / 2;
- pCopySrc = GST_BUFFER_DATA(history[history_count-1].buf);
+ pCopySrc = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-1].frame, 0);
if (history[history_count - 1].flags & PICTURE_INTERLACED_BOTTOM)
pCopySrc += rowsize;
- pCopySrcP = GST_BUFFER_DATA(history[history_count-3].buf);
+ pCopySrcP = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-3].frame, 0);
if (history[history_count - 3].flags & PICTURE_INTERLACED_BOTTOM)
pCopySrcP += rowsize;
- pWeaveSrc = GST_BUFFER_DATA(history[history_count-2].buf);
+ pWeaveSrc = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-2].frame, 0);
if (history[history_count - 2].flags & PICTURE_INTERLACED_BOTTOM)
pWeaveSrc += rowsize;
- pWeaveSrcP = GST_BUFFER_DATA(history[history_count-4].buf);
+ pWeaveSrcP = GST_VIDEO_FRAME_PLANE_DATA (history[history_count-4].frame, 0);
if (history[history_count - 4].flags & PICTURE_INTERLACED_BOTTOM)
pWeaveSrcP += rowsize;
@@ -119,7 +118,7 @@
IsOdd = 1;
// if we have an odd field we copy an even field and weave an odd field
- pCopyDest = GST_BUFFER_DATA(outbuf);
+ pCopyDest = GST_VIDEO_FRAME_PLANE_DATA (outframe, 0);
pWeaveDest = pCopyDest + dst_pitch;
}
/* do it vice verca */
@@ -127,8 +126,8 @@
IsOdd = 0;
// if we have an even field we copy an odd field and weave an even field
- pCopyDest = GST_BUFFER_DATA(outbuf) + dst_pitch;
- pWeaveDest = GST_BUFFER_DATA(outbuf);
+ pCopyDest = (guint8 *) GST_VIDEO_FRAME_PLANE_DATA (outframe, 0) + dst_pitch;
+ pWeaveDest = GST_VIDEO_FRAME_PLANE_DATA (outframe, 0);
}
diff --git a/gst/effectv/Makefile.in b/gst/effectv/Makefile.in
index 3582336..2ded75e 100644
--- a/gst/effectv/Makefile.in
+++ b/gst/effectv/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -255,7 +255,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/equalizer/Makefile.in b/gst/equalizer/Makefile.in
index 9787570..de5db88 100644
--- a/gst/equalizer/Makefile.in
+++ b/gst/equalizer/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -253,7 +253,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/equalizer/gstiirequalizer.c b/gst/equalizer/gstiirequalizer.c
index 7ac9d58..13bf9ec 100644
--- a/gst/equalizer/gstiirequalizer.c
+++ b/gst/equalizer/gstiirequalizer.c
@@ -653,14 +653,14 @@
GST_DEBUG ("adding band[%d]=%p", i, equ->bands[i]);
gst_object_set_parent (GST_OBJECT (equ->bands[i]), GST_OBJECT (equ));
- gst_child_proxy_child_added (G_OBJECT (equ),
+ gst_child_proxy_child_added (GST_CHILD_PROXY (equ),
G_OBJECT (equ->bands[i]), name);
}
} else {
/* free unused bands */
for (i = new_count; i < old_count; i++) {
GST_DEBUG ("removing band[%d]=%p", i, equ->bands[i]);
- gst_child_proxy_child_removed (G_OBJECT (equ),
+ gst_child_proxy_child_removed (GST_CHILD_PROXY (equ),
G_OBJECT (equ->bands[i]), GST_OBJECT_NAME (equ->bands[i]));
gst_object_unparent (GST_OBJECT (equ->bands[i]));
equ->bands[i] = NULL;
diff --git a/gst/equalizer/gstiirequalizer10bands.c b/gst/equalizer/gstiirequalizer10bands.c
index 83be5de..5907d33 100644
--- a/gst/equalizer/gstiirequalizer10bands.c
+++ b/gst/equalizer/gstiirequalizer10bands.c
@@ -146,38 +146,38 @@
gst_iir_equalizer_10bands_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
- GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+ GstChildProxy *equ = GST_CHILD_PROXY (object);
switch (prop_id) {
case PROP_BAND0:
- gst_child_proxy_set_property (G_OBJECT (equ), "band0::gain", value);
+ gst_child_proxy_set_property (equ, "band0::gain", value);
break;
case PROP_BAND1:
- gst_child_proxy_set_property (G_OBJECT (equ), "band1::gain", value);
+ gst_child_proxy_set_property (equ, "band1::gain", value);
break;
case PROP_BAND2:
- gst_child_proxy_set_property (G_OBJECT (equ), "band2::gain", value);
+ gst_child_proxy_set_property (equ, "band2::gain", value);
break;
case PROP_BAND3:
- gst_child_proxy_set_property (G_OBJECT (equ), "band3::gain", value);
+ gst_child_proxy_set_property (equ, "band3::gain", value);
break;
case PROP_BAND4:
- gst_child_proxy_set_property (G_OBJECT (equ), "band4::gain", value);
+ gst_child_proxy_set_property (equ, "band4::gain", value);
break;
case PROP_BAND5:
- gst_child_proxy_set_property (G_OBJECT (equ), "band5::gain", value);
+ gst_child_proxy_set_property (equ, "band5::gain", value);
break;
case PROP_BAND6:
- gst_child_proxy_set_property (G_OBJECT (equ), "band6::gain", value);
+ gst_child_proxy_set_property (equ, "band6::gain", value);
break;
case PROP_BAND7:
- gst_child_proxy_set_property (G_OBJECT (equ), "band7::gain", value);
+ gst_child_proxy_set_property (equ, "band7::gain", value);
break;
case PROP_BAND8:
- gst_child_proxy_set_property (G_OBJECT (equ), "band8::gain", value);
+ gst_child_proxy_set_property (equ, "band8::gain", value);
break;
case PROP_BAND9:
- gst_child_proxy_set_property (G_OBJECT (equ), "band9::gain", value);
+ gst_child_proxy_set_property (equ, "band9::gain", value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -189,38 +189,38 @@
gst_iir_equalizer_10bands_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
- GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+ GstChildProxy *equ = GST_CHILD_PROXY (object);
switch (prop_id) {
case PROP_BAND0:
- gst_child_proxy_get_property (G_OBJECT (equ), "band0::gain", value);
+ gst_child_proxy_get_property (equ, "band0::gain", value);
break;
case PROP_BAND1:
- gst_child_proxy_get_property (G_OBJECT (equ), "band1::gain", value);
+ gst_child_proxy_get_property (equ, "band1::gain", value);
break;
case PROP_BAND2:
- gst_child_proxy_get_property (G_OBJECT (equ), "band2::gain", value);
+ gst_child_proxy_get_property (equ, "band2::gain", value);
break;
case PROP_BAND3:
- gst_child_proxy_get_property (G_OBJECT (equ), "band3::gain", value);
+ gst_child_proxy_get_property (equ, "band3::gain", value);
break;
case PROP_BAND4:
- gst_child_proxy_get_property (G_OBJECT (equ), "band4::gain", value);
+ gst_child_proxy_get_property (equ, "band4::gain", value);
break;
case PROP_BAND5:
- gst_child_proxy_get_property (G_OBJECT (equ), "band5::gain", value);
+ gst_child_proxy_get_property (equ, "band5::gain", value);
break;
case PROP_BAND6:
- gst_child_proxy_get_property (G_OBJECT (equ), "band6::gain", value);
+ gst_child_proxy_get_property (equ, "band6::gain", value);
break;
case PROP_BAND7:
- gst_child_proxy_get_property (G_OBJECT (equ), "band7::gain", value);
+ gst_child_proxy_get_property (equ, "band7::gain", value);
break;
case PROP_BAND8:
- gst_child_proxy_get_property (G_OBJECT (equ), "band8::gain", value);
+ gst_child_proxy_get_property (equ, "band8::gain", value);
break;
case PROP_BAND9:
- gst_child_proxy_get_property (G_OBJECT (equ), "band9::gain", value);
+ gst_child_proxy_get_property (equ, "band9::gain", value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/gst/equalizer/gstiirequalizer3bands.c b/gst/equalizer/gstiirequalizer3bands.c
index d9410e5..c44bb19 100644
--- a/gst/equalizer/gstiirequalizer3bands.c
+++ b/gst/equalizer/gstiirequalizer3bands.c
@@ -101,17 +101,17 @@
gst_iir_equalizer_3bands_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
- GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+ GstChildProxy *equ = GST_CHILD_PROXY (object);
switch (prop_id) {
case PROP_BAND0:
- gst_child_proxy_set_property (G_OBJECT (equ), "band0::gain", value);
+ gst_child_proxy_set_property (equ, "band0::gain", value);
break;
case PROP_BAND1:
- gst_child_proxy_set_property (G_OBJECT (equ), "band1::gain", value);
+ gst_child_proxy_set_property (equ, "band1::gain", value);
break;
case PROP_BAND2:
- gst_child_proxy_set_property (G_OBJECT (equ), "band2::gain", value);
+ gst_child_proxy_set_property (equ, "band2::gain", value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -123,17 +123,17 @@
gst_iir_equalizer_3bands_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
- GstIirEqualizer *equ = GST_IIR_EQUALIZER (object);
+ GstChildProxy *equ = GST_CHILD_PROXY (object);
switch (prop_id) {
case PROP_BAND0:
- gst_child_proxy_get_property (G_OBJECT (equ), "band0::gain", value);
+ gst_child_proxy_get_property (equ, "band0::gain", value);
break;
case PROP_BAND1:
- gst_child_proxy_get_property (G_OBJECT (equ), "band1::gain", value);
+ gst_child_proxy_get_property (equ, "band1::gain", value);
break;
case PROP_BAND2:
- gst_child_proxy_get_property (G_OBJECT (equ), "band2::gain", value);
+ gst_child_proxy_get_property (equ, "band2::gain", value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/gst/flv/Makefile.in b/gst/flv/Makefile.in
index b773636..cdf05e7 100644
--- a/gst/flv/Makefile.in
+++ b/gst/flv/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index d22104a..df53775 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -642,6 +642,7 @@
gchar *codec_name = NULL;
gboolean ret = FALSE;
guint adjusted_rate = rate;
+ gchar *stream_id;
switch (codec_tag) {
case 1:
@@ -732,6 +733,11 @@
demux->audio_codec_data, NULL);
}
+ stream_id =
+ gst_pad_create_stream_id (demux->audio_pad, GST_ELEMENT_CAST (demux),
+ "audio");
+ gst_pad_push_event (demux->audio_pad, gst_event_new_stream_start (stream_id));
+ g_free (stream_id);
ret = gst_pad_set_caps (demux->audio_pad, caps);
if (G_LIKELY (ret)) {
@@ -796,8 +802,8 @@
if (demux->taglist) {
GST_DEBUG_OBJECT (demux, "pushing tags out %" GST_PTR_FORMAT,
demux->taglist);
- gst_flv_demux_push_src_event (demux, gst_event_new_tag ("GstDemuxer",
- demux->taglist));
+ gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
+ gst_flv_demux_push_src_event (demux, gst_event_new_tag (demux->taglist));
demux->taglist = gst_tag_list_new_empty ();
demux->push_tags = FALSE;
}
@@ -1122,6 +1128,7 @@
gboolean ret = FALSE;
GstCaps *caps = NULL;
gchar *codec_name = NULL;
+ gchar *stream_id;
/* Generate caps for that pad */
switch (codec_tag) {
@@ -1178,6 +1185,10 @@
demux->video_codec_data, NULL);
}
+ stream_id =
+ gst_pad_create_stream_id (demux->video_pad, GST_ELEMENT_CAST (demux),
+ "video");
+ gst_pad_push_event (demux->video_pad, gst_event_new_stream_start (stream_id));
ret = gst_pad_set_caps (demux->video_pad, caps);
if (G_LIKELY (ret)) {
@@ -2458,12 +2469,17 @@
gst_element_post_message (GST_ELEMENT_CAST (demux),
gst_message_new_segment_done (GST_OBJECT_CAST (demux),
GST_FORMAT_TIME, stop));
+ gst_flv_demux_push_src_event (demux,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
} else { /* Reverse playback */
GST_LOG_OBJECT (demux, "Sending segment done, at beginning of "
"segment");
gst_element_post_message (GST_ELEMENT_CAST (demux),
gst_message_new_segment_done (GST_OBJECT_CAST (demux),
GST_FORMAT_TIME, demux->segment.start));
+ gst_flv_demux_push_src_event (demux,
+ gst_event_new_segment_done (GST_FORMAT_TIME,
+ demux->segment.start));
}
} else {
/* normal playback, send EOS to all linked pads */
@@ -2828,7 +2844,7 @@
gst_pad_pause_task (demux->sinkpad);
} else {
gst_pad_start_task (demux->sinkpad,
- (GstTaskFunction) gst_flv_demux_loop, demux->sinkpad);
+ (GstTaskFunction) gst_flv_demux_loop, demux->sinkpad, NULL);
}
GST_PAD_STREAM_UNLOCK (demux->sinkpad);
@@ -2893,7 +2909,7 @@
if (active) {
demux->random_access = TRUE;
res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flv_demux_loop,
- sinkpad);
+ sinkpad, NULL);
} else {
demux->random_access = FALSE;
res = gst_pad_stop_task (sinkpad);
@@ -2979,6 +2995,10 @@
demux->video_need_segment = TRUE;
ret = TRUE;
gst_event_unref (event);
+ if (demux->new_seg_event) {
+ gst_event_unref (demux->new_seg_event);
+ demux->new_seg_event = NULL;
+ }
}
break;
}
@@ -3229,7 +3249,7 @@
}
if (demux->taglist) {
- gst_tag_list_free (demux->taglist);
+ gst_tag_list_unref (demux->taglist);
demux->taglist = NULL;
}
diff --git a/gst/flx/Makefile.in b/gst/flx/Makefile.in
index fc7bef9..353e253 100644
--- a/gst/flx/Makefile.in
+++ b/gst/flx/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/goom/Makefile.in b/gst/goom/Makefile.in
index 7064d00..af15732 100644
--- a/gst/goom/Makefile.in
+++ b/gst/goom/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -266,7 +266,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/goom/gstgoom.c b/gst/goom/gstgoom.c
index 1ffe7c8..e6ecd72 100644
--- a/gst/goom/gstgoom.c
+++ b/gst/goom/gstgoom.c
@@ -235,7 +235,7 @@
GST_DEBUG_OBJECT (goom, "dimension %dx%d, framerate %d/%d, spf %d",
goom->width, goom->height, goom->fps_n, goom->fps_d, goom->spf);
- res = gst_pad_push_event (goom->srcpad, gst_event_new_caps (caps));
+ res = gst_pad_set_caps (goom->srcpad, caps);
return res;
diff --git a/gst/goom2k1/Makefile.in b/gst/goom2k1/Makefile.in
index 7bf4dc8..acac8b0 100644
--- a/gst/goom2k1/Makefile.in
+++ b/gst/goom2k1/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/goom2k1/gstgoom.c b/gst/goom2k1/gstgoom.c
index 72bad75..e5d9671 100644
--- a/gst/goom2k1/gstgoom.c
+++ b/gst/goom2k1/gstgoom.c
@@ -234,7 +234,7 @@
GST_DEBUG_OBJECT (goom, "dimension %dx%d, framerate %d/%d, spf %d",
goom->width, goom->height, goom->fps_n, goom->fps_d, goom->spf);
- return gst_pad_push_event (goom->srcpad, gst_event_new_caps (caps));
+ return gst_pad_set_caps (goom->srcpad, caps);
/* ERRORS */
error:
diff --git a/gst/icydemux/Makefile.in b/gst/icydemux/Makefile.in
index 81fe0d7..289198b 100644
--- a/gst/icydemux/Makefile.in
+++ b/gst/icydemux/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/icydemux/gsticydemux.c b/gst/icydemux/gsticydemux.c
index e72b104..678485a 100644
--- a/gst/icydemux/gsticydemux.c
+++ b/gst/icydemux/gsticydemux.c
@@ -131,7 +131,7 @@
gst_icydemux_remove_srcpad (icydemux);
if (icydemux->cached_tags) {
- gst_tag_list_free (icydemux->cached_tags);
+ gst_tag_list_unref (icydemux->cached_tags);
icydemux->cached_tags = NULL;
}
@@ -287,7 +287,7 @@
} else {
gst_tag_list_insert (icydemux->cached_tags, tags,
GST_TAG_MERGE_REPLACE_ALL);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
return TRUE;
@@ -341,7 +341,7 @@
if (!gst_tag_list_is_empty (tags))
gst_icydemux_tag_found (icydemux, tags);
else
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
static gboolean
@@ -614,10 +614,7 @@
{
GstEvent *event;
- gst_element_post_message (GST_ELEMENT (icydemux),
- gst_message_new_tag (GST_OBJECT (icydemux), gst_tag_list_copy (tags)));
-
- event = gst_event_new_tag ("GstDemuxer", tags);
+ event = gst_event_new_tag (tags);
GST_EVENT_TIMESTAMP (event) = 0;
GST_DEBUG_OBJECT (icydemux, "Sending tag event on src pad");
diff --git a/gst/id3demux/Makefile.in b/gst/id3demux/Makefile.in
index bc39420..6e76e62 100644
--- a/gst/id3demux/Makefile.in
+++ b/gst/id3demux/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/imagefreeze/Makefile.in b/gst/imagefreeze/Makefile.in
index e90e77d..df4000d 100644
--- a/gst/imagefreeze/Makefile.in
+++ b/gst/imagefreeze/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c
index 211df8d..0617cef 100644
--- a/gst/imagefreeze/gstimagefreeze.c
+++ b/gst/imagefreeze/gstimagefreeze.c
@@ -649,7 +649,7 @@
if (self->buffer != NULL)
gst_pad_start_task (self->srcpad,
- (GstTaskFunction) gst_image_freeze_src_loop, self->srcpad);
+ (GstTaskFunction) gst_image_freeze_src_loop, self->srcpad, NULL);
g_mutex_unlock (&self->lock);
}
@@ -685,7 +685,7 @@
self->buffer = buffer;
gst_pad_start_task (self->srcpad, (GstTaskFunction) gst_image_freeze_src_loop,
- self->srcpad);
+ self->srcpad, NULL);
g_mutex_unlock (&self->lock);
return GST_FLOW_EOS;
}
@@ -714,7 +714,7 @@
if (self->need_segment) {
GstEvent *e;
- GST_DEBUG_OBJECT (pad, "Pushing NEWSEGMENT event: %" GST_SEGMENT_FORMAT,
+ GST_DEBUG_OBJECT (pad, "Pushing SEGMENT event: %" GST_SEGMENT_FORMAT,
&self->segment);
e = gst_event_new_segment (&self->segment);
@@ -777,7 +777,8 @@
if (in_seg) {
GstFlowReturn ret;
- GST_BUFFER_TIMESTAMP (buffer) = cstart;
+ GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_PTS (buffer) = cstart;
GST_BUFFER_DURATION (buffer) = cstop - cstart;
GST_BUFFER_OFFSET (buffer) = offset;
GST_BUFFER_OFFSET_END (buffer) = offset + 1;
@@ -793,15 +794,20 @@
if (eos) {
if ((self->segment.flags & GST_SEEK_FLAG_SEGMENT)) {
GstMessage *m;
+ GstEvent *e;
GST_DEBUG_OBJECT (pad, "Sending segment done at end of segment");
- if (self->segment.rate >= 0)
+ if (self->segment.rate >= 0) {
m = gst_message_new_segment_done (GST_OBJECT_CAST (self),
GST_FORMAT_TIME, self->segment.stop);
- else
+ e = gst_event_new_segment_done (GST_FORMAT_TIME, self->segment.stop);
+ } else {
m = gst_message_new_segment_done (GST_OBJECT_CAST (self),
GST_FORMAT_TIME, self->segment.start);
+ e = gst_event_new_segment_done (GST_FORMAT_TIME, self->segment.start);
+ }
gst_element_post_message (GST_ELEMENT_CAST (self), m);
+ gst_pad_push_event (self->srcpad, e);
} else {
GST_DEBUG_OBJECT (pad, "Sending EOS at end of segment");
gst_pad_push_event (self->srcpad, gst_event_new_eos ());
diff --git a/gst/interleave/Makefile.in b/gst/interleave/Makefile.in
index 53b47d3..149880a 100644
--- a/gst/interleave/Makefile.in
+++ b/gst/interleave/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/interleave/deinterleave.c b/gst/interleave/deinterleave.c
index 2ca78af..9336157 100644
--- a/gst/interleave/deinterleave.c
+++ b/gst/interleave/deinterleave.c
@@ -409,7 +409,9 @@
cannot_change_caps:
{
- GST_ERROR_OBJECT (self, "can't set new caps: %" GST_PTR_FORMAT, caps);
+ GST_WARNING_OBJECT (self, "caps change from %" GST_PTR_FORMAT
+ " to %" GST_PTR_FORMAT " not supported: channel number or channel "
+ "positions change", self->sinkcaps, caps);
return FALSE;
}
unsupported_caps:
diff --git a/gst/interleave/interleave.c b/gst/interleave/interleave.c
index 5055969..63424ca 100644
--- a/gst/interleave/interleave.c
+++ b/gst/interleave/interleave.c
@@ -601,10 +601,7 @@
case GST_STATE_CHANGE_READY_TO_PAUSED:
self->timestamp = 0;
self->offset = 0;
- self->segment_pending = TRUE;
- self->segment_position = 0;
- self->segment_rate = 1.0;
- gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+ gst_event_replace (&self->pending_segment, NULL);
gst_collect_pads_start (self->collect);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
@@ -627,6 +624,7 @@
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_caps_replace (&self->sinkcaps, NULL);
+ gst_event_replace (&self->pending_segment, NULL);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
break;
@@ -829,14 +827,17 @@
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_FLUSH_STOP:
- /* mark a pending new segment. This event is synchronized
- * with the streaming thread so we can safely update the
- * variable without races. It's somewhat weird because we
- * assume the collectpads forwarded the FLUSH_STOP past us
- * and downstream (using our source pad, the bastard!).
- */
- self->segment_pending = TRUE;
+ GST_OBJECT_LOCK (self);
+ gst_event_replace (&self->pending_segment, NULL);
+ GST_OBJECT_UNLOCK (self);
break;
+ case GST_EVENT_SEGMENT:
+ {
+ GST_OBJECT_LOCK (self);
+ gst_event_replace (&self->pending_segment, event);
+ GST_OBJECT_UNLOCK (self);
+ break;
+ }
case GST_EVENT_CAPS:
{
GstCaps *caps;
@@ -1134,12 +1135,8 @@
case GST_EVENT_SEEK:
{
GstSeekFlags flags;
- GstSeekType curtype;
- gint64 cur;
- /* parse the seek parameters */
- gst_event_parse_seek (event, &self->segment_rate, NULL, &flags, &curtype,
- &cur, NULL, NULL);
+ gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
/* check if we are flushing */
if (flags & GST_SEEK_FLAG_FLUSH) {
@@ -1150,17 +1147,6 @@
* when all pads received a FLUSH_STOP. */
gst_pad_push_event (self->src, gst_event_new_flush_start ());
}
-
- /* now wait for the collected to be finished and mark a new
- * segment */
- GST_OBJECT_LOCK (self->collect);
- if (curtype == GST_SEEK_TYPE_SET)
- self->segment_position = cur;
- else
- self->segment_position = 0;
- self->segment_pending = TRUE;
- GST_OBJECT_UNLOCK (self->collect);
-
result = forward_event (self, event);
break;
}
@@ -1189,6 +1175,7 @@
gboolean empty = TRUE;
gint width = self->width / 8;
GstMapInfo write_info;
+ GstClockTime timestamp = -1;
size = gst_collect_pads_available (pads);
if (size == 0)
@@ -1232,6 +1219,9 @@
ncollected++;
gst_buffer_map (inbuf, &input_info, GST_MAP_READ);
+ if (timestamp == -1)
+ timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+
if (GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP))
goto next;
@@ -1252,15 +1242,61 @@
goto eos;
}
- if (self->segment_pending) {
+ GST_OBJECT_LOCK (self);
+ if (self->pending_segment) {
GstEvent *event;
+ GstSegment segment;
- self->segment.format = GST_FORMAT_TIME;
- event = gst_event_new_segment (&self->segment);
+ event = self->pending_segment;
+ self->pending_segment = NULL;
+ GST_OBJECT_UNLOCK (self);
+ /* convert the input segment to time now */
+ gst_event_copy_segment (event, &segment);
+
+ if (segment.format != GST_FORMAT_TIME) {
+ gst_event_unref (event);
+
+ /* not time, convert */
+ switch (segment.format) {
+ case GST_FORMAT_BYTES:
+ segment.start *= width;
+ if (segment.stop != -1)
+ segment.stop *= width;
+ if (segment.position != -1)
+ segment.position *= width;
+ /* fallthrough for the samples case */
+ case GST_FORMAT_DEFAULT:
+ segment.start =
+ gst_util_uint64_scale_int (segment.start, GST_SECOND, self->rate);
+ if (segment.stop != -1)
+ segment.stop =
+ gst_util_uint64_scale_int (segment.stop, GST_SECOND,
+ self->rate);
+ if (segment.position != -1)
+ segment.position =
+ gst_util_uint64_scale_int (segment.position, GST_SECOND,
+ self->rate);
+ break;
+ default:
+ GST_WARNING ("can't convert segment values");
+ segment.start = 0;
+ segment.stop = -1;
+ segment.position = 0;
+ break;
+ }
+ event = gst_event_new_segment (&segment);
+ }
gst_pad_push_event (self->src, event);
- self->segment_pending = FALSE;
- self->segment_position = 0;
+
+ GST_OBJECT_LOCK (self);
+ }
+ GST_OBJECT_UNLOCK (self);
+
+ if (timestamp != -1) {
+ self->offset = gst_util_uint64_scale_int (timestamp, self->rate,
+ GST_SECOND);
+ self->timestamp = timestamp;
}
GST_BUFFER_TIMESTAMP (outbuf) = self->timestamp;
@@ -1270,8 +1306,8 @@
self->timestamp = gst_util_uint64_scale_int (self->offset,
GST_SECOND, self->rate);
- GST_BUFFER_DURATION (outbuf) = self->timestamp -
- GST_BUFFER_TIMESTAMP (outbuf);
+ GST_BUFFER_DURATION (outbuf) =
+ self->timestamp - GST_BUFFER_TIMESTAMP (outbuf);
if (empty)
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
diff --git a/gst/interleave/interleave.h b/gst/interleave/interleave.h
index fb3b274..a11bb21 100644
--- a/gst/interleave/interleave.h
+++ b/gst/interleave/interleave.h
@@ -65,10 +65,7 @@
GstClockTime timestamp;
guint64 offset;
- gboolean segment_pending;
- guint64 segment_position;
- gdouble segment_rate;
- GstSegment segment;
+ GstEvent *pending_segment;
GstPadEventFunction collect_event;
diff --git a/gst/isomp4/Makefile.in b/gst/isomp4/Makefile.in
index f2a890a..7e80fba 100644
--- a/gst/isomp4/Makefile.in
+++ b/gst/isomp4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -256,7 +256,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/isomp4/gstqtmoovrecover.c b/gst/isomp4/gstqtmoovrecover.c
index 194ea80..07fd35a 100644
--- a/gst/isomp4/gstqtmoovrecover.c
+++ b/gst/isomp4/gstqtmoovrecover.c
@@ -343,7 +343,7 @@
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
- qtmr->task = gst_task_new (gst_qt_moov_recover_run, qtmr);
+ qtmr->task = gst_task_new (gst_qt_moov_recover_run, qtmr, NULL);
g_rec_mutex_init (&qtmr->task_mutex);
gst_task_set_lock (qtmr->task, &qtmr->task_mutex);
break;
@@ -362,7 +362,8 @@
gst_task_join (qtmr->task);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
- g_assert (gst_task_get_state (qtmr->task) == GST_TASK_STOPPED);
+ if (gst_task_get_state (qtmr->task) != GST_TASK_STOPPED)
+ GST_ERROR ("task %p should be stopped by now", qtmr->task);
gst_object_unref (qtmr->task);
qtmr->task = NULL;
g_rec_mutex_clear (&qtmr->task_mutex);
diff --git a/gst/isomp4/gstqtmux-doc.c b/gst/isomp4/gstqtmux-doc.c
index 986fffc..dc81bf1 100644
--- a/gst/isomp4/gstqtmux-doc.c
+++ b/gst/isomp4/gstqtmux-doc.c
@@ -61,7 +61,7 @@
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
@@ -125,7 +125,7 @@
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
@@ -162,7 +162,7 @@
* <refsect2>
* <title>Example pipelines</title>
* |[
- * gst-launch v4l2src num-buffers=50 ! queue ! ffenc_h263 ! gppmux ! filesink location=video.3gp
+ * gst-launch v4l2src num-buffers=50 ! queue ! ffenc_h263 ! 3gppmux ! filesink location=video.3gp
* ]|
* Records a video stream captured from a v4l2 device, encodes it into H.263
* and muxes it into an 3gp file.
@@ -189,7 +189,7 @@
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
@@ -253,7 +253,7 @@
* ISO 14496-12 (except for some media specific parts).
* In turn, the latter ISO Base Media format was further specialized as a
* Motion JPEG-2000 file format in ISO 15444-3 (mj2mux)
- * and in various 3GPP(2) specs (gppmux).
+ * and in various 3GPP(2) specs (3gppmux).
* The fragmented file features defined (only) in ISO Base Media are used by
* ISMV files making up (a.o.) Smooth Streaming (ismlmux).
*
diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c
index 3c1636a..221dd06 100644
--- a/gst/isomp4/gstqtmux.c
+++ b/gst/isomp4/gstqtmux.c
@@ -252,9 +252,8 @@
/* construct the element details struct */
longname = g_strdup_printf ("%s Muxer", params->prop->long_name);
- description = g_strdup_printf ("Multiplex audio and video into a %s file%s",
- params->prop->long_name,
- (params->prop->rank == GST_RANK_NONE) ? " (deprecated)" : "");
+ description = g_strdup_printf ("Multiplex audio and video into a %s file",
+ params->prop->long_name);
gst_element_class_set_static_metadata (element_class, longname,
"Codec/Muxer", description,
"Thiago Sousa Santos <thiagoss@embedded.ufcg.edu.br>");
@@ -1113,24 +1112,23 @@
num_tags = gst_tag_list_get_tag_size (list, GST_QT_DEMUX_PRIVATE_TAG);
for (i = 0; i < num_tags; ++i) {
- const GValue *val;
+ GstSample *sample = NULL;
GstBuffer *buf;
- GstCaps *caps = NULL;
+ const GstStructure *s;
- val = gst_tag_list_get_value_index (list, GST_QT_DEMUX_PRIVATE_TAG, i);
- buf = (GstBuffer *) gst_value_get_buffer (val);
+ if (!gst_tag_list_get_sample_index (list, GST_QT_DEMUX_PRIVATE_TAG, i,
+ &sample))
+ continue;
+ buf = gst_sample_get_buffer (sample);
- /* FIXME-0.11 */
- if (buf && (caps = NULL /*gst_buffer_get_caps (buf) */ )) {
- GstStructure *s;
+ if (buf && (s = gst_sample_get_info (sample))) {
const gchar *style = NULL;
GstMapInfo map;
gst_buffer_map (buf, &map, GST_MAP_READ);
GST_DEBUG_OBJECT (qtmux,
- "Found private tag %d/%d; size %" G_GSIZE_FORMAT ", caps %"
- GST_PTR_FORMAT, i, num_tags, map.size, caps);
- s = gst_caps_get_structure (caps, 0);
+ "Found private tag %d/%d; size %" G_GSIZE_FORMAT ", info %"
+ GST_PTR_FORMAT, i, num_tags, map.size, s);
if (s && (style = gst_structure_get_string (s, "style"))) {
/* try to prevent some style tag ending up into another variant
* (todo: make into a list if more cases) */
@@ -1143,7 +1141,6 @@
}
}
gst_buffer_unmap (buf, &map);
- gst_caps_unref (caps);
}
}
}
@@ -1177,7 +1174,7 @@
GST_DEBUG_OBJECT (qtmux, "Formatting tags");
gst_qt_mux_add_metadata_tags (qtmux, copy);
gst_qt_mux_add_xmp_tags (qtmux, copy);
- gst_tag_list_free (copy);
+ gst_tag_list_unref (copy);
} else {
GST_DEBUG_OBJECT (qtmux, "No tags received");
}
@@ -2113,7 +2110,7 @@
check_and_subtract_ts (GstQTMux * qtmux, GstClockTime * ts_a, GstClockTime ts_b)
{
if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (*ts_a))) {
- if (G_LIKELY (*ts_a > ts_b)) {
+ if (G_LIKELY (*ts_a >= ts_b)) {
*ts_a -= ts_b;
} else {
*ts_a = 0;
diff --git a/gst/isomp4/gstqtmuxmap.c b/gst/isomp4/gstqtmuxmap.c
index 0d41eb7..29675b4 100644
--- a/gst/isomp4/gstqtmuxmap.c
+++ b/gst/isomp4/gstqtmuxmap.c
@@ -210,21 +210,6 @@
GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
}
,
-#ifndef GST_REMOVE_DEPRECATED
- /* 3GPP Technical Specification 26.244 V7.3.0
- * (extended in 3GPP2 File Formats for Multimedia Services) */
- {
- GST_QT_MUX_FORMAT_3GP,
- GST_RANK_NONE,
- "gppmux",
- "3GPP",
- "GstGPPMux",
- GST_STATIC_CAPS ("video/quicktime, variant = (string) 3gpp"),
- GST_STATIC_CAPS (H263_CAPS "; " MPEG4V_CAPS "; " H264_CAPS),
- GST_STATIC_CAPS (AMR_CAPS "; " MP3_CAPS "; " AAC_CAPS)
- }
- ,
-#endif
/* ISO 15444-3: Motion-JPEG-2000 (also ISO base media extension) */
{
GST_QT_MUX_FORMAT_MJ2,
diff --git a/gst/isomp4/gstrtpxqtdepay.c b/gst/isomp4/gstrtpxqtdepay.c
index 61567d7..5f02eaf 100644
--- a/gst/isomp4/gstrtpxqtdepay.c
+++ b/gst/isomp4/gstrtpxqtdepay.c
@@ -257,9 +257,6 @@
gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
- if (!gst_rtp_buffer_validate (buf))
- goto bad_packet;
-
if (GST_BUFFER_IS_DISCONT (buf)) {
/* discont, clear adapter and try to find a new packet start */
gst_adapter_clear (rtpxqtdepay->adapter);
@@ -605,6 +602,7 @@
gst_buffer_fill (outbuf, 0, payload, payload_len);
gst_adapter_push (rtpxqtdepay->adapter, outbuf);
+ outbuf = NULL;
if (!m)
goto done;
@@ -624,12 +622,6 @@
gst_rtp_buffer_unmap (&rtp);
return outbuf;
-bad_packet:
- {
- GST_ELEMENT_WARNING (rtpxqtdepay, STREAM, DECODE,
- ("Packet did not validate."), (NULL));
- goto done;
- }
need_resync:
{
GST_DEBUG_OBJECT (rtpxqtdepay, "waiting for marker");
diff --git a/gst/isomp4/isomp4-plugin.c b/gst/isomp4/isomp4-plugin.c
index 9418e94..b0fe326 100644
--- a/gst/isomp4/isomp4-plugin.c
+++ b/gst/isomp4/isomp4-plugin.c
@@ -44,7 +44,7 @@
/* ensure private tag is registered */
gst_tag_register (GST_QT_DEMUX_PRIVATE_TAG, GST_TAG_FLAG_META,
- GST_TYPE_BUFFER, "QT atom", "unparsed QT tag atom",
+ GST_TYPE_SAMPLE, "QT atom", "unparsed QT tag atom",
gst_tag_merge_use_first);
gst_tag_register (GST_QT_DEMUX_CLASSIFICATION_TAG, GST_TAG_FLAG_META,
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index ae3aa4c..89f8055 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -720,12 +720,16 @@
gst_query_parse_duration (query, &fmt, NULL);
if (fmt == GST_FORMAT_TIME) {
- gint64 duration = -1;
+ /* First try to query upstream */
+ res = gst_pad_query_default (pad, parent, query);
+ if (!res) {
+ gint64 duration = -1;
- gst_qtdemux_get_duration (qtdemux, &duration);
- if (duration > 0) {
- gst_query_set_duration (query, GST_FORMAT_TIME, duration);
- res = TRUE;
+ gst_qtdemux_get_duration (qtdemux, &duration);
+ if (duration > 0) {
+ gst_query_set_duration (query, GST_FORMAT_TIME, duration);
+ res = TRUE;
+ }
}
}
break;
@@ -794,7 +798,7 @@
GST_DEBUG_OBJECT (qtdemux, "Sending tags %" GST_PTR_FORMAT,
stream->pending_tags);
gst_pad_push_event (stream->pad,
- gst_event_new_tag ("GstDemuxer", stream->pending_tags));
+ gst_event_new_tag (stream->pending_tags));
stream->pending_tags = NULL;
}
@@ -802,8 +806,7 @@
GST_DEBUG_OBJECT (qtdemux, "Sending global tags %" GST_PTR_FORMAT,
qtdemux->tag_list);
gst_pad_push_event (stream->pad,
- gst_event_new_tag ("GstDemuxer",
- gst_tag_list_copy (qtdemux->tag_list)));
+ gst_event_new_tag (gst_tag_list_ref (qtdemux->tag_list)));
stream->send_global_tags = FALSE;
}
}
@@ -1419,7 +1422,7 @@
qtdemux->streams[i]->last_ret = GST_FLOW_OK;
gst_pad_start_task (qtdemux->sinkpad, (GstTaskFunction) gst_qtdemux_loop,
- qtdemux->sinkpad);
+ qtdemux->sinkpad, NULL);
GST_PAD_STREAM_UNLOCK (qtdemux->sinkpad);
@@ -1484,8 +1487,11 @@
}
if (qtdemux->pullbased) {
res = gst_qtdemux_do_seek (qtdemux, pad, event);
- } else if (qtdemux->state == QTDEMUX_STATE_MOVIE && qtdemux->n_streams &&
- !qtdemux->fragmented) {
+ } else if (gst_pad_push_event (qtdemux->sinkpad, gst_event_ref (event))) {
+ GST_DEBUG_OBJECT (qtdemux, "Upstream successfully seeked");
+ res = TRUE;
+ } else if (qtdemux->state == QTDEMUX_STATE_MOVIE && qtdemux->n_streams
+ && !qtdemux->fragmented) {
res = gst_qtdemux_do_push_seek (qtdemux, pad, event);
} else {
GST_DEBUG_OBJECT (qtdemux,
@@ -1654,7 +1660,8 @@
}
/* accept upstream's notion of segment and distribute along */
- segment.time = segment.start;
+ segment.format = GST_FORMAT_TIME;
+ segment.position = segment.time = segment.start;
segment.duration = demux->segment.duration;
segment.base = gst_segment_to_running_time (&demux->segment,
GST_FORMAT_TIME, demux->segment.position);
@@ -1789,7 +1796,7 @@
gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream)
{
if (stream->allocator)
- gst_allocator_unref (stream->allocator);
+ gst_object_unref (stream->allocator);
while (stream->buffers) {
gst_buffer_unref (GST_BUFFER_CAST (stream->buffers->data));
stream->buffers = g_slist_delete_link (stream->buffers, stream->buffers);
@@ -1801,7 +1808,7 @@
gst_caps_unref (stream->caps);
g_free (stream->segments);
if (stream->pending_tags)
- gst_tag_list_free (stream->pending_tags);
+ gst_tag_list_unref (stream->pending_tags);
g_free (stream->redirect_uri);
/* free stbl sub-atoms */
gst_qtdemux_stbl_free (stream);
@@ -1844,7 +1851,7 @@
gst_buffer_unref (qtdemux->comp_brands);
qtdemux->comp_brands = NULL;
if (qtdemux->tag_list)
- gst_tag_list_free (qtdemux->tag_list);
+ gst_tag_list_unref (qtdemux->tag_list);
qtdemux->tag_list = NULL;
#if 0
if (qtdemux->element_index)
@@ -1876,20 +1883,6 @@
}
static void
-qtdemux_post_global_tags (GstQTDemux * qtdemux)
-{
- if (qtdemux->tag_list) {
- /* all header tags ready and parsed, push them */
- GST_INFO_OBJECT (qtdemux, "posting global tags: %" GST_PTR_FORMAT,
- qtdemux->tag_list);
- /* post now, send event on pads later */
- gst_element_post_message (GST_ELEMENT (qtdemux),
- gst_message_new_tag (GST_OBJECT (qtdemux),
- gst_tag_list_copy (qtdemux->tag_list)));
- }
-}
-
-static void
qtdemux_parse_ftyp (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
{
/* counts as header data */
@@ -1919,7 +1912,7 @@
if (qtdemux->tag_list) {
/* prioritize native tags using _KEEP mode */
gst_tag_list_insert (qtdemux->tag_list, taglist, GST_TAG_MERGE_KEEP);
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
} else
qtdemux->tag_list = taglist;
}
@@ -2806,9 +2799,6 @@
/* digested all data, show what we have */
ret = qtdemux_expose_streams (qtdemux);
- /* Only post, event on pads is done after newsegment */
- qtdemux_post_global_tags (qtdemux);
-
qtdemux->state = QTDEMUX_STATE_MOVIE;
GST_DEBUG_OBJECT (qtdemux, "switching state to STATE_MOVIE (%d)",
qtdemux->state);
@@ -3880,12 +3870,17 @@
gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
GST_FORMAT_TIME, stop));
+ gst_qtdemux_push_event (qtdemux,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
} else {
/* For Reverse Playback */
GST_LOG_OBJECT (qtdemux, "Sending segment done, at start of segment");
gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
gst_message_new_segment_done (GST_OBJECT_CAST (qtdemux),
GST_FORMAT_TIME, qtdemux->segment.start));
+ gst_qtdemux_push_event (qtdemux,
+ gst_event_new_segment_done (GST_FORMAT_TIME,
+ qtdemux->segment.start));
}
} else {
GST_LOG_OBJECT (qtdemux, "Sending EOS at end of segment");
@@ -4095,10 +4090,6 @@
demux->state = QTDEMUX_STATE_MOVIE;
demux->neededbytes = next_entry_size (demux);
demux->mdatleft = size;
-
- /* Only post, event on pads is done after newsegment */
- qtdemux_post_global_tags (demux);
-
} else {
/* no headers yet, try to get them */
guint bs;
@@ -4237,10 +4228,6 @@
demux->neededbytes = next_entry_size (demux);
demux->state = QTDEMUX_STATE_MOVIE;
demux->mdatleft = gst_adapter_available (demux->adapter);
-
- /* Only post, event on pads is done after newsegment */
- qtdemux_post_global_tags (demux);
-
} else {
GST_DEBUG_OBJECT (demux, "Carrying on normally");
gst_adapter_flush (demux->adapter, demux->neededbytes);
@@ -4490,7 +4477,7 @@
if (active) {
demux->pullbased = TRUE;
res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_qtdemux_loop,
- sinkpad);
+ sinkpad, NULL);
} else {
res = gst_pad_stop_task (sinkpad);
}
@@ -5015,7 +5002,7 @@
}
if (stream->allocator)
- gst_allocator_unref (stream->allocator);
+ gst_object_unref (stream->allocator);
if (gst_query_get_n_allocation_params (query) > 0) {
/* try the allocator */
@@ -5181,6 +5168,8 @@
}
if (stream->pad) {
+ gchar *stream_id;
+
GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
gst_pad_use_fixed_caps (stream->pad);
@@ -5189,6 +5178,11 @@
gst_pad_set_active (stream->pad, TRUE);
GST_DEBUG_OBJECT (qtdemux, "setting caps %" GST_PTR_FORMAT, stream->caps);
+ stream_id =
+ gst_pad_create_stream_id_printf (stream->pad,
+ GST_ELEMENT_CAST (qtdemux), "%u", stream->track_id);
+ gst_pad_push_event (stream->pad, gst_event_new_stream_start (stream_id));
+ g_free (stream_id);
gst_pad_set_caps (stream->pad, stream->caps);
GST_DEBUG_OBJECT (qtdemux, "adding pad %s %p to qtdemux %p",
@@ -5196,7 +5190,7 @@
gst_element_add_pad (GST_ELEMENT_CAST (qtdemux), stream->pad);
if (stream->pending_tags)
- gst_tag_list_free (stream->pending_tags);
+ gst_tag_list_unref (stream->pending_tags);
stream->pending_tags = list;
/* global tags go on each pad anyway */
stream->send_global_tags = TRUE;
@@ -7747,8 +7741,6 @@
if (qtdemux->n_streams == 1 && qtdemux->streams[0]->redirect_uri != NULL) {
GstMessage *m;
- qtdemux_post_global_tags (qtdemux);
-
GST_INFO_OBJECT (qtdemux, "Issuing a redirect due to a single track with "
"an external content");
m = gst_message_new_element (GST_OBJECT_CAST (qtdemux),
@@ -8469,7 +8461,7 @@
}
if (taglist)
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
gst_buffer_unref (buf);
}
@@ -8556,7 +8548,8 @@
GstBuffer *buf;
gchar *media_type;
const gchar *style;
- GstCaps *caps;
+ GstSample *sample;
+ GstStructure *s;
guint i;
guint8 ndata[4];
@@ -8588,18 +8581,16 @@
ndata[0], ndata[1], ndata[2], ndata[3]);
GST_DEBUG_OBJECT (demux, "media type %s", media_type);
- caps = gst_caps_new_simple (media_type, "style", G_TYPE_STRING, style, NULL);
- // TODO conver to metadata or ???
-// gst_buffer_set_caps (buf, caps);
- gst_caps_unref (caps);
+ s = gst_structure_new (media_type, "style", G_TYPE_STRING, style, NULL);
+ sample = gst_sample_new (buf, NULL, NULL, s);
+ gst_buffer_unref (buf);
g_free (media_type);
- GST_DEBUG_OBJECT (demux, "adding private tag; size %d, caps %" GST_PTR_FORMAT,
- len, caps);
+ GST_DEBUG_OBJECT (demux, "adding private tag; size %d, info %" GST_PTR_FORMAT,
+ len, s);
gst_tag_list_add (demux->tag_list, GST_TAG_MERGE_APPEND,
- GST_QT_DEMUX_PRIVATE_TAG, buf, NULL);
- gst_buffer_unref (buf);
+ GST_QT_DEMUX_PRIVATE_TAG, sample, NULL);
}
static void
@@ -8624,8 +8615,10 @@
}
GST_DEBUG_OBJECT (qtdemux, "new tag list");
- if (!qtdemux->tag_list)
+ if (!qtdemux->tag_list) {
qtdemux->tag_list = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (qtdemux->tag_list, GST_TAG_SCOPE_GLOBAL);
+ }
i = 0;
while (i < G_N_ELEMENTS (add_funcs)) {
@@ -8842,8 +8835,10 @@
{
const gchar *fmt;
- if (tags == NULL)
+ if (tags == NULL) {
tags = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+ }
if (qtdemux->major_brand == FOURCC_mjp2)
fmt = "Motion JPEG 2000";
@@ -8920,8 +8915,10 @@
}
}
if (datetime) {
- if (!qtdemux->tag_list)
+ if (!qtdemux->tag_list) {
qtdemux->tag_list = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (qtdemux->tag_list, GST_TAG_SCOPE_GLOBAL);
+ }
/* Use KEEP as explicit tags should have a higher priority than mvhd tag */
gst_tag_list_add (qtdemux->tag_list, GST_TAG_MERGE_KEEP, GST_TAG_DATE_TIME,
diff --git a/gst/law/Makefile.in b/gst/law/Makefile.in
index f0e3cf4..39997fe 100644
--- a/gst/law/Makefile.in
+++ b/gst/law/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -258,7 +258,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/level/Makefile.in b/gst/level/Makefile.in
index 193d556..60c33aa 100644
--- a/gst/level/Makefile.in
+++ b/gst/level/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/level/gstlevel.c b/gst/level/gstlevel.c
index 8107acb..5fc5be6 100644
--- a/gst/level/gstlevel.c
+++ b/gst/level/gstlevel.c
@@ -346,7 +346,6 @@
\
normalizer = (gdouble) (G_GINT64_CONSTANT(1) << (RESOLUTION * 2)); \
\
- /* oil_squaresum_shifted_s16(&squaresum,in,num); */ \
for (j = 0; j < num; j += channels) \
{ \
square = ((gdouble) in[j]) * in[j]; \
diff --git a/gst/matroska/Makefile.in b/gst/matroska/Makefile.in
index 6a85a91..359e4aa 100644
--- a/gst/matroska/Makefile.in
+++ b/gst/matroska/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -256,7 +256,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index d66769b..b2b6304 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -171,7 +171,7 @@
/* stream methods */
static void gst_matroska_demux_reset (GstElement * element);
static gboolean perform_seek_to_offset (GstMatroskaDemux * demux,
- guint64 offset);
+ gdouble rate, guint64 offset);
/* gobject functions */
static void gst_matroska_demux_set_property (GObject * object,
@@ -194,7 +194,7 @@
}
if (demux->common.global_tags) {
- gst_tag_list_free (demux->common.global_tags);
+ gst_tag_list_unref (demux->common.global_tags);
demux->common.global_tags = NULL;
}
@@ -309,7 +309,7 @@
}
if (track->pending_tags)
- gst_tag_list_free (track->pending_tags);
+ gst_tag_list_unref (track->pending_tags);
if (track->index_table)
g_array_free (track->index_table, TRUE);
@@ -436,6 +436,7 @@
demux->last_stop_end = GST_CLOCK_TIME_NONE;
demux->seek_block = 0;
demux->stream_start_time = GST_CLOCK_TIME_NONE;
+ demux->to_time = GST_CLOCK_TIME_NONE;
demux->common.offset = 0;
demux->cluster_time = GST_CLOCK_TIME_NONE;
@@ -444,6 +445,8 @@
demux->index_offset = 0;
demux->seekable = FALSE;
demux->need_segment = FALSE;
+ demux->requested_seek_time = GST_CLOCK_TIME_NONE;
+ demux->seek_offset = -1;
demux->building_index = FALSE;
if (demux->seek_event) {
gst_event_unref (demux->seek_event);
@@ -466,9 +469,10 @@
#endif
if (demux->common.global_tags) {
- gst_tag_list_free (demux->common.global_tags);
+ gst_tag_list_unref (demux->common.global_tags);
}
demux->common.global_tags = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (demux->common.global_tags, GST_TAG_SCOPE_GLOBAL);
if (demux->common.cached_buffer) {
if (demux->common.cached_data) {
@@ -481,7 +485,7 @@
/* free chapters TOC if any */
if (demux->common.toc) {
- gst_toc_free (demux->common.toc);
+ gst_toc_unref (demux->common.toc);
demux->common.toc = NULL;
}
@@ -531,6 +535,7 @@
guint16 riff_audio_fmt = 0;
GstTagList *list = NULL;
gchar *codec = NULL;
+ gchar *stream_id;
DEBUG_ELEMENT_START (demux, ebml, "TrackEntry");
@@ -555,6 +560,8 @@
GST_MATROSKA_TRACK_ENABLED | GST_MATROSKA_TRACK_DEFAULT |
GST_MATROSKA_TRACK_LACING;
context->last_flow = GST_FLOW_OK;
+ context->from_time = GST_CLOCK_TIME_NONE;
+ context->from_offset = -1;
context->to_offset = G_MAXINT64;
context->alignment = 1;
demux->common.num_streams++;
@@ -1329,7 +1336,14 @@
gst_pad_use_fixed_caps (context->pad);
gst_pad_set_active (context->pad, TRUE);
+
+ stream_id =
+ gst_pad_create_stream_id_printf (context->pad, GST_ELEMENT_CAST (demux),
+ "%u", context->uid);
+ gst_pad_push_event (context->pad, gst_event_new_stream_start (stream_id));
+ g_free (stream_id);
gst_pad_set_caps (context->pad, context->caps);
+
gst_element_add_pad (GST_ELEMENT (demux), context->pad);
g_free (padname);
@@ -1356,6 +1370,7 @@
gst_query_parse_position (query, &format, NULL);
+ res = TRUE;
if (format == GST_FORMAT_TIME) {
GST_OBJECT_LOCK (demux);
if (context)
@@ -1376,9 +1391,9 @@
} else {
GST_DEBUG_OBJECT (demux,
"only position query in TIME and DEFAULT format is supported");
+ res = FALSE;
}
- res = TRUE;
break;
}
case GST_QUERY_DURATION:
@@ -1387,6 +1402,7 @@
gst_query_parse_duration (query, &format, NULL);
+ res = TRUE;
if (format == GST_FORMAT_TIME) {
GST_OBJECT_LOCK (demux);
gst_query_set_duration (query, GST_FORMAT_TIME,
@@ -1401,9 +1417,8 @@
} else {
GST_DEBUG_OBJECT (demux,
"only duration query in TIME and DEFAULT format is supported");
+ res = FALSE;
}
-
- res = TRUE;
break;
}
@@ -1430,25 +1445,13 @@
GST_OBJECT_UNLOCK (demux);
break;
}
-
- case GST_QUERY_TOC:
- {
- GstToc *toc;
-
- GST_OBJECT_LOCK (demux);
- if (demux->common.toc)
- toc = demux->common.toc;
- else
- toc = gst_toc_new ();
- gst_query_set_toc (query, toc, 0);
- res = TRUE;
- if (!demux->common.toc)
- gst_toc_free (toc);
- GST_OBJECT_UNLOCK (demux);
- break;
- }
default:
- res = gst_pad_query_default (pad, (GstObject *) demux, query);
+ if (pad)
+ res = gst_pad_query_default (pad, (GstObject *) demux, query);
+ else
+ res =
+ GST_ELEMENT_CLASS (parent_class)->query (GST_ELEMENT_CAST (demux),
+ query);
break;
}
@@ -1502,7 +1505,7 @@
GST_PTR_FORMAT, stream->pending_tags,
GST_DEBUG_PAD_NAME (stream->pad), stream->pending_tags);
gst_pad_push_event (stream->pad,
- gst_event_new_tag ("GstDemuxer", stream->pending_tags));
+ gst_event_new_tag (stream->pending_tags));
stream->pending_tags = NULL;
}
}
@@ -1514,7 +1517,7 @@
GST_DEBUG_OBJECT (demux, "Sending global_tags %p : %" GST_PTR_FORMAT,
demux->common.global_tags, demux->common.global_tags);
- tag_event = gst_event_new_tag ("GstDemuxer", demux->common.global_tags);
+ tag_event = gst_event_new_tag (demux->common.global_tags);
for (i = 0; i < demux->common.src->len; i++) {
GstMatroskaTrackContext *stream;
@@ -1552,26 +1555,30 @@
static gboolean
gst_matroska_demux_move_to_entry (GstMatroskaDemux * demux,
- GstMatroskaIndex * entry, gboolean reset)
+ GstMatroskaIndex * entry, gboolean reset, gboolean update)
{
gint i;
GST_OBJECT_LOCK (demux);
- /* seek (relative to matroska segment) */
- /* position might be invalid; will error when streaming resumes ... */
- demux->common.offset = entry->pos + demux->common.ebml_segment_start;
+ if (update) {
+ /* seek (relative to matroska segment) */
+ /* position might be invalid; will error when streaming resumes ... */
+ demux->common.offset = entry->pos + demux->common.ebml_segment_start;
+ demux->next_cluster_offset = 0;
- GST_DEBUG_OBJECT (demux, "Seeked to offset %" G_GUINT64_FORMAT ", block %d, "
- "time %" GST_TIME_FORMAT, entry->pos + demux->common.ebml_segment_start,
- entry->block, GST_TIME_ARGS (entry->time));
+ GST_DEBUG_OBJECT (demux,
+ "Seeked to offset %" G_GUINT64_FORMAT ", block %d, " "time %"
+ GST_TIME_FORMAT, entry->pos + demux->common.ebml_segment_start,
+ entry->block, GST_TIME_ARGS (entry->time));
- /* update the time */
- gst_matroska_read_common_reset_streams (&demux->common, entry->time, TRUE);
- demux->common.segment.position = entry->time;
- demux->seek_block = entry->block;
- demux->seek_first = TRUE;
- demux->last_stop_end = GST_CLOCK_TIME_NONE;
+ /* update the time */
+ gst_matroska_read_common_reset_streams (&demux->common, entry->time, TRUE);
+ demux->common.segment.position = entry->time;
+ demux->seek_block = entry->block;
+ demux->seek_first = TRUE;
+ demux->last_stop_end = GST_CLOCK_TIME_NONE;
+ }
for (i = 0; i < demux->common.src->len; i++) {
GstMatroskaTrackContext *stream = g_ptr_array_index (demux->common.src, i);
@@ -1583,6 +1590,7 @@
stream->to_offset = stream->from_offset;
}
stream->from_offset = -1;
+ stream->from_time = GST_CLOCK_TIME_NONE;
}
GST_OBJECT_UNLOCK (demux);
@@ -1961,13 +1969,20 @@
GST_DEBUG_OBJECT (demux, "configuring seek");
gst_segment_do_seek (&seeksegment, rate, format, flags,
cur_type, cur, stop_type, stop, &update);
- /* compensate for clip start time */
+ /* compensate for clip start time, but only for SET seeks,
+ * otherwise it is already part of the segments */
if (GST_CLOCK_TIME_IS_VALID (demux->stream_start_time)) {
- seeksegment.position += demux->stream_start_time;
- seeksegment.start += demux->stream_start_time;
- if (GST_CLOCK_TIME_IS_VALID (seeksegment.stop))
+ if (cur_type == GST_SEEK_TYPE_SET) {
+ if (rate > 0.0)
+ seeksegment.position += demux->stream_start_time;
+ seeksegment.start += demux->stream_start_time;
+ }
+ if (stop_type == GST_SEEK_TYPE_SET
+ && GST_CLOCK_TIME_IS_VALID (seeksegment.stop)) {
+ if (rate < 0.0)
+ seeksegment.position += demux->stream_start_time;
seeksegment.stop += demux->stream_start_time;
- /* note that time should stay at indicated position */
+ }
}
}
@@ -1980,15 +1995,11 @@
after = ! !(flags & GST_SEEK_FLAG_SNAP_AFTER);
before = ! !(flags & GST_SEEK_FLAG_SNAP_BEFORE);
- GST_DEBUG_OBJECT (demux, "New segment %" GST_SEGMENT_FORMAT, &seeksegment);
+ /* always do full update if flushing,
+ * otherwise problems might arise downstream with missing keyframes etc */
+ update = update || flush;
- if (!update) {
- /* only have to update some segment,
- * but also still have to honour flush and so on */
- GST_DEBUG_OBJECT (demux, "... no update");
- /* bad goto, bad ... */
- goto next;
- }
+ GST_DEBUG_OBJECT (demux, "New segment %" GST_SEGMENT_FORMAT, &seeksegment);
/* check sanity before we start flushing and all that */
snap_next = after && !before;
@@ -2004,24 +2015,31 @@
GST_DEBUG_OBJECT (demux, "No matching seek entry in index");
GST_OBJECT_UNLOCK (demux);
return FALSE;
+ } else if (rate < 0.0) {
+ /* FIXME: We should build an index during playback or when scanning
+ * that can be used here. The reverse playback code requires seek_index
+ * and seek_entry to be set!
+ */
+ GST_DEBUG_OBJECT (demux,
+ "No matching seek entry in index, needed for reverse playback");
+ GST_OBJECT_UNLOCK (demux);
+ return FALSE;
}
}
GST_DEBUG_OBJECT (demux, "Seek position looks sane");
GST_OBJECT_UNLOCK (demux);
- if (demux->streaming) {
- GST_OBJECT_LOCK (demux);
- /* now update the real segment info */
- GST_DEBUG_OBJECT (demux, "Committing new seek segment");
- memcpy (&demux->common.segment, &seeksegment, sizeof (GstSegment));
- GST_OBJECT_UNLOCK (demux);
- /* need to seek to cluster start to pick up cluster time */
- /* upstream takes care of flushing and all that
- * ... and segment event handling takes care of the rest */
- return perform_seek_to_offset (demux,
- entry->pos + demux->common.ebml_segment_start);
+ if (!update) {
+ /* only have to update some segment,
+ * but also still have to honour flush and so on */
+ GST_DEBUG_OBJECT (demux, "... no update");
+ /* bad goto, bad ... */
+ goto next;
}
+ if (demux->streaming)
+ goto finish;
+
next:
if (flush) {
GST_DEBUG_OBJECT (demux, "Starting flush");
@@ -2062,6 +2080,7 @@
}
}
+finish:
if (keyunit) {
GST_DEBUG_OBJECT (demux, "seek to key unit, adjusting segment start from %"
GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
@@ -2071,6 +2090,20 @@
seeksegment.time = seeksegment.start - demux->stream_start_time;
}
+ if (demux->streaming) {
+ GST_OBJECT_LOCK (demux);
+ /* track real position we should start at */
+ GST_DEBUG_OBJECT (demux, "storing segment start");
+ demux->requested_seek_time = seeksegment.position;
+ demux->seek_offset = entry->pos + demux->common.ebml_segment_start;
+ GST_OBJECT_UNLOCK (demux);
+ /* need to seek to cluster start to pick up cluster time */
+ /* upstream takes care of flushing and all that
+ * ... and newsegment event handling takes care of the rest */
+ return perform_seek_to_offset (demux, rate,
+ entry->pos + demux->common.ebml_segment_start);
+ }
+
exit:
if (flush) {
GST_DEBUG_OBJECT (demux, "Stopping flush");
@@ -2085,7 +2118,7 @@
GST_OBJECT_UNLOCK (demux);
/* update some (segment) state */
- if (update && !gst_matroska_demux_move_to_entry (demux, entry, TRUE))
+ if (!gst_matroska_demux_move_to_entry (demux, entry, TRUE, update))
goto seek_error;
/* notify start of new segment */
@@ -2100,14 +2133,19 @@
GST_OBJECT_LOCK (demux);
if (demux->new_segment)
gst_event_unref (demux->new_segment);
+
/* On port from 0.10, discarded !update (for segment.update) here, FIXME? */
demux->new_segment = gst_event_new_segment (&demux->common.segment);
+ if (demux->common.segment.rate < 0 && demux->common.segment.stop == -1)
+ demux->to_time = demux->common.segment.position;
+ else
+ demux->to_time = GST_CLOCK_TIME_NONE;
GST_OBJECT_UNLOCK (demux);
/* restart our task since it might have been stopped when we did the
* flush. */
gst_pad_start_task (demux->common.sinkpad,
- (GstTaskFunction) gst_matroska_demux_loop, demux->common.sinkpad);
+ (GstTaskFunction) gst_matroska_demux_loop, demux->common.sinkpad, NULL);
/* streaming can continue now */
if (pad_locked) {
@@ -2199,7 +2237,7 @@
if (!building_index) {
/* seek to the first subindex or legacy index */
GST_INFO_OBJECT (demux, "Seeking to Cues at %" G_GUINT64_FORMAT, offset);
- return perform_seek_to_offset (demux, offset);
+ return perform_seek_to_offset (demux, rate, offset);
}
/* well, we are handling it already */
@@ -2272,7 +2310,7 @@
GST_WARNING_OBJECT (demux, "no TOC entry with given UID: %s", uid);
res = FALSE;
} else {
- gst_toc_entry_get_start_stop (entry, &start_pos, NULL);
+ gst_toc_entry_get_start_stop_times (entry, &start_pos, NULL);
GST_OBJECT_UNLOCK (demux);
seek_event = gst_event_new_seek (1.0,
GST_FORMAT_TIME,
@@ -2349,7 +2387,7 @@
entry = &g_array_index (demux->seek_index, GstMatroskaIndex,
--demux->seek_entry);
- if (!gst_matroska_demux_move_to_entry (demux, entry, FALSE))
+ if (!gst_matroska_demux_move_to_entry (demux, entry, FALSE, TRUE))
goto exit;
ret = GST_FLOW_OK;
@@ -2492,24 +2530,19 @@
GST_CLOCK_TIME_IS_VALID (demux->common.segment.position) &&
demux->common.segment.position > demux->common.segment.start &&
context->pos + (GST_SECOND / 2) < demux->common.segment.position) {
- gint64 new_start;
- GstSegment segment;
+
GstEvent *event;
+ guint64 start = context->pos;
+ guint64 stop = demux->common.segment.position - (GST_SECOND / 2);
- new_start = demux->common.segment.position - (GST_SECOND / 2);
- if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.stop))
- new_start = MIN (new_start, demux->common.segment.stop);
GST_DEBUG_OBJECT (demux,
- "Synchronizing stream %d with others by advancing time " "from %"
+ "Synchronizing stream %d with other by advancing time from %"
GST_TIME_FORMAT " to %" GST_TIME_FORMAT, stream_nr,
- GST_TIME_ARGS (context->pos), GST_TIME_ARGS (new_start));
+ GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
- context->pos = new_start;
+ context->pos = stop;
- /* advance stream time */
- segment = demux->common.segment;
- segment.position = new_start;
- event = gst_event_new_segment (&segment);
+ event = gst_event_new_gap (start, stop - start);
GST_OBJECT_UNLOCK (demux);
gst_pad_push_event (context->pad, event);
GST_OBJECT_LOCK (demux);
@@ -2950,6 +2983,8 @@
{
gchar *tag;
+ g_return_val_if_fail (text != NULL, FALSE);
+
/* yes, this might all lead to false positives ... */
tag = (gchar *) text;
while ((tag = strchr (tag, '<'))) {
@@ -2988,7 +3023,7 @@
sub_stream = (GstMatroskaTrackSubtitleContext *) stream;
- if (!gst_buffer_map (*buf, &map, GST_MAP_READ))
+ if (!gst_buffer_get_size (*buf) || !gst_buffer_map (*buf, &map, GST_MAP_READ))
return GST_FLOW_OK;
if (!sub_stream->invalid_utf8) {
@@ -3421,30 +3456,30 @@
/* need to refresh segment info ASAP */
if (GST_CLOCK_TIME_IS_VALID (lace_time) && demux->need_segment) {
GstSegment *segment = &demux->common.segment;
- guint64 segment_duration = 0;
+ guint64 clace_time;
- GST_DEBUG_OBJECT (demux,
- "generating segment starting at %" GST_TIME_FORMAT,
- GST_TIME_ARGS (lace_time));
if (!GST_CLOCK_TIME_IS_VALID (demux->stream_start_time)) {
demux->stream_start_time = lace_time;
GST_DEBUG_OBJECT (demux,
"Setting stream start time to %" GST_TIME_FORMAT,
GST_TIME_ARGS (lace_time));
}
- if (demux->common.segment.start == 0) {
- /* set segment fields only if they weren't already set by seek handling
- * code
- */
- if (GST_CLOCK_TIME_IS_VALID (segment->stop))
- segment_duration = segment->stop - segment->start;
- else if (GST_CLOCK_TIME_IS_VALID (segment->position))
- segment_duration = segment->position - segment->start;
- segment->base += segment_duration / fabs (segment->rate);
- segment->start = MAX (lace_time, demux->stream_start_time);
- segment->stop = GST_CLOCK_TIME_NONE;
- segment->position = segment->start - demux->stream_start_time;
+ clace_time = MAX (lace_time, demux->stream_start_time);
+ if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.position) &&
+ demux->common.segment.position != 0) {
+ GST_DEBUG_OBJECT (demux,
+ "using stored seek position %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->common.segment.position));
+ clace_time = demux->common.segment.position + demux->stream_start_time;
+ segment->position = GST_CLOCK_TIME_NONE;
}
+ segment->start = clace_time;
+ segment->stop = GST_CLOCK_TIME_NONE;
+ segment->time = segment->start - demux->stream_start_time;
+ segment->position = segment->start - demux->stream_start_time;
+ GST_DEBUG_OBJECT (demux,
+ "generated segment starting at %" GST_TIME_FORMAT ": %"
+ GST_SEGMENT_FORMAT, GST_TIME_ARGS (lace_time), segment);
/* now convey our segment notion downstream */
gst_matroska_demux_send_event (demux, gst_event_new_segment (segment));
demux->need_segment = FALSE;
@@ -3555,7 +3590,9 @@
gst_buffer_unref (sub);
goto eos;
}
- if (offset >= stream->to_offset) {
+ if (offset >= stream->to_offset
+ || (GST_CLOCK_TIME_IS_VALID (demux->to_time)
+ && lace_time > demux->to_time)) {
GST_DEBUG_OBJECT (demux, "Stream %d after playback section",
stream->index);
gst_buffer_unref (sub);
@@ -3703,6 +3740,7 @@
sub = gst_matroska_demux_align_buffer (demux, sub, stream->alignment);
ret = gst_pad_push (stream->pad, sub);
+
if (demux->common.segment.rate < 0) {
if (lace_time > demux->common.segment.stop && ret == GST_FLOW_EOS) {
/* In reverse playback we can get a GST_FLOW_EOS when
@@ -4372,9 +4410,6 @@
if (demux->common.toc) {
gst_matroska_demux_send_event (demux,
gst_event_new_toc (demux->common.toc, FALSE));
- gst_element_post_message (GST_ELEMENT_CAST (demux),
- gst_message_new_toc (GST_OBJECT_CAST (demux),
- demux->common.toc, FALSE));
}
} else
GST_READ_CHECK (gst_matroska_demux_flush (demux, read));
@@ -4603,6 +4638,8 @@
gst_element_post_message (GST_ELEMENT (demux),
gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
stop));
+ gst_matroska_demux_send_event (demux,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
} else {
push_eos = TRUE;
}
@@ -4629,7 +4666,7 @@
* Create and push a flushing seek event upstream
*/
static gboolean
-perform_seek_to_offset (GstMatroskaDemux * demux, guint64 offset)
+perform_seek_to_offset (GstMatroskaDemux * demux, gdouble rate, guint64 offset)
{
GstEvent *event;
gboolean res = 0;
@@ -4637,7 +4674,7 @@
GST_DEBUG_OBJECT (demux, "Seeking to %" G_GUINT64_FORMAT, offset);
event =
- gst_event_new_seek (1.0, GST_FORMAT_BYTES,
+ gst_event_new_seek (rate, GST_FORMAT_BYTES,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, offset,
GST_SEEK_TYPE_NONE, -1);
@@ -4733,6 +4770,11 @@
gst_adapter_clear (demux->common.adapter);
/* and some streaming setup */
demux->common.offset = segment->start;
+ /* accumulate base based on current position */
+ if (GST_CLOCK_TIME_IS_VALID (demux->common.segment.position))
+ demux->common.segment.base +=
+ (MAX (demux->common.segment.position, demux->stream_start_time)
+ - demux->stream_start_time) / fabs (demux->common.segment.rate);
/* do not know where we are;
* need to come across a cluster and generate segment */
demux->common.segment.position = GST_CLOCK_TIME_NONE;
@@ -4741,6 +4783,15 @@
demux->need_segment = TRUE;
/* but keep some of the upstream segment */
demux->common.segment.rate = segment->rate;
+ /* also check if need to keep some of the requested seek position */
+ if (demux->seek_offset == segment->start) {
+ GST_DEBUG_OBJECT (demux, "position matches requested seek");
+ demux->common.segment.position = demux->requested_seek_time;
+ } else {
+ GST_DEBUG_OBJECT (demux, "unexpected segment position");
+ }
+ demux->requested_seek_time = GST_CLOCK_TIME_NONE;
+ demux->seek_offset = -1;
GST_OBJECT_UNLOCK (demux);
exit:
/* chain will send initial segment after pads have been added,
@@ -4822,7 +4873,7 @@
if (active) {
/* if we have a scheduler we can start the task */
gst_pad_start_task (sinkpad, (GstTaskFunction) gst_matroska_demux_loop,
- sinkpad);
+ sinkpad, NULL);
} else {
gst_pad_stop_task (sinkpad);
}
@@ -5174,7 +5225,8 @@
}
if (videocontext->parent.flags & GST_MATROSKA_VIDEOTRACK_INTERLACED)
- gst_structure_set (structure, "interlaced", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_structure_set (structure, "interlace-mode", G_TYPE_STRING,
+ "mixed", NULL);
}
caps = gst_caps_simplify (caps);
@@ -5354,11 +5406,11 @@
auds.rate = GST_READ_UINT32_LE (data + 4);
auds.av_bps = GST_READ_UINT32_LE (data + 8);
auds.blockalign = GST_READ_UINT16_LE (data + 12);
- auds.size = GST_READ_UINT16_LE (data + 16);
+ auds.bits_per_sample = GST_READ_UINT16_LE (data + 16);
/* 18 is the waveformatex size */
codec_data = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
- data + 18, auds.size, 0, auds.size, NULL, NULL);
+ data + 18, auds.bits_per_sample, 0, auds.bits_per_sample, NULL, NULL);
if (riff_audio_fmt)
*riff_audio_fmt = auds.format;
diff --git a/gst/matroska/matroska-demux.h b/gst/matroska/matroska-demux.h
index 07038f6..0376c8a 100644
--- a/gst/matroska/matroska-demux.h
+++ b/gst/matroska/matroska-demux.h
@@ -72,6 +72,8 @@
GstClockTime last_stop_end;
GstClockTime stream_start_time;
+ /* Stop time for reverse playback */
+ GstClockTime to_time;
GstEvent *new_segment;
/* some state saving */
@@ -79,6 +81,8 @@
guint64 cluster_offset;
guint64 first_cluster_offset;
guint64 next_cluster_offset;
+ GstClockTime requested_seek_time;
+ guint64 seek_offset;
/* index stuff */
gboolean seekable;
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 91d1a1c..1a60eeb 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -647,7 +647,7 @@
mux->tags_pos = 0;
/* reset chapters */
- gst_toc_setter_reset_toc (GST_TOC_SETTER (mux));
+ gst_toc_setter_reset (GST_TOC_SETTER (mux));
mux->chapters_pos = 0;
}
@@ -798,7 +798,7 @@
break;
}
case GST_EVENT_TOC:{
- GstToc *toc;
+ GstToc *toc, *old_toc;
if (mux->chapters_pos > 0)
break;
@@ -807,13 +807,15 @@
gst_event_parse_toc (event, &toc, NULL);
if (toc != NULL) {
- if (gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL) {
- gst_toc_setter_reset_toc (GST_TOC_SETTER (mux));
- GST_INFO_OBJECT (pad, "Replacing TOC with a new one");
+ old_toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
+ if (old_toc != NULL) {
+ if (old_toc != toc)
+ GST_INFO_OBJECT (pad, "Replacing TOC with a new one");
+ gst_toc_unref (old_toc);
}
gst_toc_setter_set_toc (GST_TOC_SETTER (mux), toc);
- gst_toc_free (toc);
+ gst_toc_unref (toc);
}
gst_event_unref (event);
@@ -2336,6 +2338,7 @@
context->codec_priv, context->codec_priv_size);
}
+#if 0
static void
gst_matroska_mux_write_chapter_title (const gchar * title, GstEbmlWrite * ebml)
{
@@ -2383,7 +2386,7 @@
}
uid = gst_matroska_mux_create_uid ();
- gst_toc_entry_get_start_stop (entry, &start, &stop);
+ gst_toc_entry_get_start_stop_times (entry, &start, &stop);
master_chapteratom =
gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_CHAPTERATOM);
@@ -2428,7 +2431,7 @@
GList *cur;
GstTocEntry *subentry;
- cur = entry->subentries;
+ cur = gst_toc_entry_get_sub_entries (entry);
while (cur != NULL) {
subentry = cur->data;
gst_matroska_mux_write_chapter (mux, entry, subentry, ebml, master_chapters,
@@ -2440,6 +2443,7 @@
if (G_LIKELY (master_edition != 0))
gst_ebml_write_master_finish (ebml, master_edition);
}
+#endif
/**
* gst_matroska_mux_start:
@@ -2468,6 +2472,9 @@
GstClockTime duration = 0;
guint32 segment_uid[4];
GTimeVal time = { 0, 0 };
+#if 0
+ GstToc *toc;
+#endif
/* if not streaming, check if downstream is seekable */
if (!mux->streamable) {
@@ -2619,39 +2626,40 @@
}
gst_ebml_write_master_finish (ebml, master);
+ /* FIXME: Check if we get a TOC that is supported by Matroska
+ * and clean up the code below */
+#if 0
/* chapters */
- if (gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL && !mux->streamable) {
+ toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
+ if (toc != NULL && !mux->streamable) {
guint64 master_chapters = 0;
GstTocEntry *toc_entry;
- const GstToc *toc;
GList *cur, *to_write = NULL;
gint64 start, stop;
GST_DEBUG ("Writing chapters");
- toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
-
/* check whether we have editions or chapters at the root level */
toc_entry = toc->entries->data;
if (toc_entry->type != GST_TOC_ENTRY_TYPE_EDITION) {
toc_entry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION, "");
- gst_toc_entry_set_start_stop (toc_entry, -1, -1);
+ gst_toc_entry_set_start_stop_times (toc_entry, -1, -1);
/* aggregate all chapters without root edition */
- cur = toc->entries;
+ cur = gst_toc_get_entries (toc);
while (cur != NULL) {
toc_entry->subentries =
g_list_prepend (toc_entry->subentries, cur->data);
cur = cur->next;
}
- gst_toc_entry_get_start_stop (((GstTocEntry *) toc_entry->subentries->
- data), &start, NULL);
+ gst_toc_entry_get_start_stop_times (((GstTocEntry *)
+ toc_entry->subentries->data), &start, NULL);
toc_entry->subentries = g_list_reverse (toc_entry->subentries);
- gst_toc_entry_get_start_stop (((GstTocEntry *) toc_entry->subentries->
- data), NULL, &stop);
- gst_toc_entry_set_start_stop (toc_entry, start, stop);
+ gst_toc_entry_get_start_stop_times (((GstTocEntry *)
+ toc_entry->subentries->data), NULL, &stop);
+ gst_toc_entry_set_start_stop_times (toc_entry, start, stop);
to_write = g_list_append (to_write, toc_entry);
} else {
@@ -2676,13 +2684,19 @@
if (toc_entry != NULL) {
g_list_free (toc_entry->subentries);
toc_entry->subentries = NULL;
- gst_toc_entry_free (toc_entry);
+ gst_toc_entry_unref (toc_entry);
g_list_free (to_write);
}
}
+#endif
/* lastly, flush the cache */
gst_ebml_write_flush_cache (ebml, FALSE, 0);
+
+#if 0
+ if (toc != NULL)
+ gst_toc_unref (toc);
+#endif
}
static void
@@ -2744,6 +2758,7 @@
}
}
+#if 0
static void
gst_matroska_mux_write_toc_entry_tags (GstMatroskaMux * mux,
const GstTocEntry * entry, guint64 * master_tags)
@@ -2782,6 +2797,7 @@
cur = cur->next;
}
}
+#endif
/**
* gst_matroska_mux_finish:
@@ -2838,12 +2854,15 @@
if ((tags != NULL && !gst_tag_list_is_empty (tags))
|| gst_toc_setter_get_toc (GST_TOC_SETTER (mux)) != NULL) {
guint64 master_tags = 0, master_tag;
- GList *cur;
+#if 0
const GstToc *toc;
+#endif
GST_DEBUG_OBJECT (mux, "Writing tags");
+#if 0
toc = gst_toc_setter_get_toc (GST_TOC_SETTER (mux));
+#endif
if (tags != NULL) {
/* TODO: maybe limit via the TARGETS id by looking at the source pad */
@@ -2853,13 +2872,15 @@
if (tags != NULL)
gst_tag_list_foreach (tags, gst_matroska_mux_write_simple_tag, ebml);
+#if 0
if (toc != NULL)
gst_tag_list_foreach (toc->tags, gst_matroska_mux_write_simple_tag,
ebml);
+#endif
gst_ebml_write_master_finish (ebml, master_tag);
}
-
+#if 0
if (toc != NULL) {
cur = toc->entries;
while (cur != NULL) {
@@ -2867,6 +2888,7 @@
cur = cur->next;
}
}
+#endif
if (master_tags != 0)
gst_ebml_write_master_finish (ebml, master_tags);
diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c
index c7acb89..7f42925 100644
--- a/gst/matroska/matroska-parse.c
+++ b/gst/matroska/matroska-parse.c
@@ -151,7 +151,7 @@
}
if (parse->common.global_tags) {
- gst_tag_list_free (parse->common.global_tags);
+ gst_tag_list_unref (parse->common.global_tags);
parse->common.global_tags = NULL;
}
@@ -256,7 +256,7 @@
}
if (track->pending_tags)
- gst_tag_list_free (track->pending_tags);
+ gst_tag_list_unref (track->pending_tags);
if (track->index_table)
g_array_free (track->index_table, TRUE);
@@ -370,7 +370,7 @@
#endif
if (parse->common.global_tags) {
- gst_tag_list_free (parse->common.global_tags);
+ gst_tag_list_unref (parse->common.global_tags);
}
parse->common.global_tags = gst_tag_list_new_empty ();
@@ -2984,6 +2984,8 @@
gst_element_post_message (GST_ELEMENT (parse),
gst_message_new_segment_done (GST_OBJECT (parse), GST_FORMAT_TIME,
stop));
+ gst_matroska_parse_send_event (parse,
+ gst_event_new_segment_done (GST_FORMAT_TIME, stop));
} else {
push_eos = TRUE;
}
diff --git a/gst/matroska/matroska-read-common.c b/gst/matroska/matroska-read-common.c
index 3a2c8f8..cd4d535 100644
--- a/gst/matroska/matroska-read-common.c
+++ b/gst/matroska/matroska-read-common.c
@@ -437,9 +437,9 @@
if (common->global_tags) {
/* nothing sent yet, add to cache */
gst_tag_list_insert (common->global_tags, taglist, GST_TAG_MERGE_APPEND);
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
} else {
- GstEvent *tag_event = gst_event_new_tag ("GstDemuxer", taglist);
+ GstEvent *tag_event = gst_event_new_tag (taglist);
gint i;
/* hm, already sent, no need to cache and wait anymore */
@@ -688,6 +688,7 @@
}
taglist = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (taglist, GST_TAG_SCOPE_GLOBAL);
while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
@@ -712,7 +713,7 @@
gst_matroska_read_common_found_global_tag (common, el, taglist);
} else {
GST_DEBUG_OBJECT (common, "No valid attachments found");
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
}
common->attachments_parsed = TRUE;
@@ -729,25 +730,30 @@
guint64 tgt;
GArray *targets;
GList *cur;
+ GstTagList *etags;
targets =
- (entry->type ==
+ (gst_toc_entry_get_entry_type (entry) ==
GST_TOC_ENTRY_TYPE_EDITION) ? edition_targets : chapter_targtes;
+ etags = gst_tag_list_new_empty ();
+
for (i = 0; i < targets->len; ++i) {
tgt = g_array_index (targets, guint64, i);
if (tgt == 0)
- gst_tag_list_insert (entry->tags, tags, GST_TAG_MERGE_APPEND);
+ gst_tag_list_insert (etags, tags, GST_TAG_MERGE_APPEND);
else {
uid = g_strdup_printf ("%" G_GUINT64_FORMAT, tgt);
- if (g_strcmp0 (entry->uid, uid) == 0)
- gst_tag_list_insert (entry->tags, tags, GST_TAG_MERGE_APPEND);
+ if (g_strcmp0 (gst_toc_entry_get_uid (entry), uid) == 0)
+ gst_tag_list_insert (etags, tags, GST_TAG_MERGE_APPEND);
g_free (uid);
}
}
- cur = entry->subentries;
+ gst_toc_entry_merge_tags (entry, etags, GST_TAG_MERGE_APPEND);
+
+ cur = gst_toc_entry_get_sub_entries (entry);
while (cur != NULL) {
gst_matroska_read_common_parse_toc_tag (cur->data, edition_targets,
chapter_targtes, tags);
@@ -804,31 +810,26 @@
{
GstTocEntry *cur_info, *prev_info, *next_info;
GList *cur_list, *prev_list, *next_list;
- gchar *iter_digit;
- gint i = 0;
gint64 cur_start, prev_start, stop;
cur_list = toc_entries;
while (cur_list != NULL) {
- ++i;
cur_info = cur_list->data;
- iter_digit = g_strdup_printf ("%d", i);
-
- switch (cur_info->type) {
+ switch (gst_toc_entry_get_entry_type (cur_info)) {
+ case GST_TOC_ENTRY_TYPE_ANGLE:
+ case GST_TOC_ENTRY_TYPE_VERSION:
case GST_TOC_ENTRY_TYPE_EDITION:
/* in Matroska terms edition has duration of full track */
- gst_toc_entry_set_start_stop (cur_info, 0, max);
+ gst_toc_entry_set_start_stop_times (cur_info, 0, max);
- if (cur_info->uid == NULL)
- cur_info->uid =
- g_strconcat (parent_uid, "/", GST_MATROSKA_TOC_UID_EDITION,
- iter_digit, NULL);
-
- gst_matroska_read_common_postprocess_toc_entries (cur_info->subentries,
- max, cur_info->uid);
+ gst_matroska_read_common_postprocess_toc_entries
+ (gst_toc_entry_get_sub_entries (cur_info), max,
+ gst_toc_entry_get_uid (cur_info));
break;
+ case GST_TOC_ENTRY_TYPE_TITLE:
+ case GST_TOC_ENTRY_TYPE_TRACK:
case GST_TOC_ENTRY_TYPE_CHAPTER:
prev_list = cur_list->prev;
next_list = cur_list->next;
@@ -843,39 +844,37 @@
else
next_info = NULL;
- if (cur_info->uid == NULL)
- cur_info->uid =
- g_strconcat (parent_uid, "/", GST_MATROSKA_TOC_UID_CHAPTER,
- iter_digit, NULL);
-
/* updated stop time in previous chapter and it's subchapters */
if (prev_info != NULL) {
- gst_toc_entry_get_start_stop (prev_info, &prev_start, &stop);
- gst_toc_entry_get_start_stop (cur_info, &cur_start, &stop);
+ gst_toc_entry_get_start_stop_times (prev_info, &prev_start, &stop);
+ gst_toc_entry_get_start_stop_times (cur_info, &cur_start, &stop);
stop = cur_start;
- gst_toc_entry_set_start_stop (prev_info, prev_start, stop);
+ gst_toc_entry_set_start_stop_times (prev_info, prev_start, stop);
gst_matroska_read_common_postprocess_toc_entries
- (prev_info->subentries, cur_start, prev_info->uid);
+ (gst_toc_entry_get_sub_entries (prev_info), cur_start,
+ gst_toc_entry_get_uid (prev_info));
}
/* updated stop time in current chapter and it's subchapters */
if (next_info == NULL) {
- gst_toc_entry_get_start_stop (cur_info, &cur_start, &stop);
+ gst_toc_entry_get_start_stop_times (cur_info, &cur_start, &stop);
if (stop == -1) {
stop = max;
- gst_toc_entry_set_start_stop (cur_info, cur_start, stop);
+ gst_toc_entry_set_start_stop_times (cur_info, cur_start, stop);
}
gst_matroska_read_common_postprocess_toc_entries
- (cur_info->subentries, stop, cur_info->uid);
+ (gst_toc_entry_get_sub_entries (cur_info), stop,
+ gst_toc_entry_get_uid (cur_info));
}
break;
+ case GST_TOC_ENTRY_TYPE_INVALID:
+ break;
}
cur_list = cur_list->next;
- g_free (iter_digit);
}
}
@@ -923,14 +922,16 @@
static GstFlowReturn
gst_matroska_read_common_parse_chapter_element (GstMatroskaReadCommon * common,
- GstEbmlRead * ebml, GstTocEntry * toc_entry)
+ GstEbmlRead * ebml, GList ** subentries)
{
guint32 id;
guint64 start_time = -1, stop_time = -1;
guint64 is_hidden = 0, is_enabled = 1, uid = 0;
GstFlowReturn ret = GST_FLOW_OK;
GstTocEntry *chapter_info;
- GstTagList *titles;
+ GstTagList *tags;
+ gchar *uid_str;
+ GList *subsubentries = NULL, *l;
DEBUG_ELEMENT_START (common, ebml, "ChaptersElement");
@@ -939,9 +940,7 @@
return ret;
}
- titles = gst_tag_list_new_empty ();
- chapter_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER,
- GST_MATROSKA_TOC_UID_EMPTY);
+ tags = gst_tag_list_new_empty ();
while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
@@ -963,13 +962,12 @@
case GST_MATROSKA_ID_CHAPTERATOM:
ret =
gst_matroska_read_common_parse_chapter_element (common, ebml,
- chapter_info);
+ &subsubentries);
break;
case GST_MATROSKA_ID_CHAPTERDISPLAY:
ret =
- gst_matroska_read_common_parse_chapter_titles (common, ebml,
- titles);
+ gst_matroska_read_common_parse_chapter_titles (common, ebml, tags);
break;
case GST_MATROSKA_ID_CHAPTERFLAGHIDDEN:
@@ -988,29 +986,29 @@
}
}
- gst_toc_entry_set_start_stop (chapter_info, start_time, stop_time);
+ if (uid == 0)
+ uid = (((guint64) g_random_int ()) << 32) | g_random_int ();
+ uid_str = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
+ chapter_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER, uid_str);
+ g_free (uid_str);
+
+ gst_toc_entry_set_tags (chapter_info, tags);
+ gst_toc_entry_set_start_stop_times (chapter_info, start_time, stop_time);
+
+ for (l = subsubentries; l; l = l->next)
+ gst_toc_entry_append_sub_entry (chapter_info, l->data);
+ g_list_free (subsubentries);
DEBUG_ELEMENT_STOP (common, ebml, "ChaptersElement", ret);
- g_free (chapter_info->uid);
-
- if (uid != 0)
- chapter_info->uid = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
- else
- chapter_info->uid = NULL;
-
/* start time is mandatory and has no default value,
* so we should skip chapters without it */
if (is_hidden == 0 && is_enabled > 0 &&
start_time != -1 && ret == GST_FLOW_OK) {
- if (!gst_tag_list_is_empty (titles))
- gst_tag_list_insert (chapter_info->tags, titles, GST_TAG_MERGE_APPEND);
-
- toc_entry->subentries = g_list_append (toc_entry->subentries, chapter_info);
+ *subentries = g_list_append (*subentries, chapter_info);
} else
- gst_toc_entry_free (chapter_info);
+ gst_toc_entry_unref (chapter_info);
- gst_tag_list_free (titles);
return ret;
}
@@ -1022,6 +1020,8 @@
guint64 is_hidden = 0, uid = 0;
GstFlowReturn ret = GST_FLOW_OK;
GstTocEntry *edition_info;
+ GList *subentries = NULL, *l;
+ gchar *uid_str;
DEBUG_ELEMENT_START (common, ebml, "ChaptersEdition");
@@ -1030,11 +1030,6 @@
return ret;
}
- edition_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION,
- GST_MATROSKA_TOC_UID_EMPTY);
-
- gst_toc_entry_set_start_stop (edition_info, -1, -1);
-
while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
break;
@@ -1047,7 +1042,7 @@
case GST_MATROSKA_ID_CHAPTERATOM:
ret =
gst_matroska_read_common_parse_chapter_element (common, ebml,
- edition_info);
+ &subentries);
break;
case GST_MATROSKA_ID_EDITIONFLAGHIDDEN:
@@ -1064,19 +1059,22 @@
DEBUG_ELEMENT_STOP (common, ebml, "ChaptersEdition", ret);
- g_free (edition_info->uid);
+ if (uid == 0)
+ uid = (((guint64) g_random_int ()) << 32) | g_random_int ();
+ uid_str = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
+ edition_info = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION, uid_str);
+ gst_toc_entry_set_start_stop_times (edition_info, -1, -1);
+ g_free (uid_str);
- if (uid != 0)
- edition_info->uid = g_strdup_printf ("%" G_GUINT64_FORMAT, uid);
- else
- edition_info->uid = NULL;
+ for (l = subentries; l; l = l->next)
+ gst_toc_entry_append_sub_entry (edition_info, l->data);
- if (is_hidden == 0 && edition_info->subentries != NULL && ret == GST_FLOW_OK)
- toc->entries = g_list_prepend (toc->entries, edition_info);
+ if (is_hidden == 0 && subentries != NULL && ret == GST_FLOW_OK)
+ gst_toc_append_entry (toc, edition_info);
else {
GST_DEBUG_OBJECT (common,
"Skipping empty or hidden edition in the chapters TOC");
- gst_toc_entry_free (edition_info);
+ gst_toc_entry_unref (edition_info);
}
return ret;
@@ -1097,7 +1095,8 @@
return ret;
}
- toc = gst_toc_new ();
+ /* FIXME: create CURRENT toc as well */
+ toc = gst_toc_new (GST_TOC_SCOPE_GLOBAL);
while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
if ((ret = gst_ebml_peek_id (ebml, &id)) != GST_FLOW_OK)
@@ -1116,14 +1115,13 @@
}
}
- if (toc->entries != NULL) {
- toc->entries = g_list_reverse (toc->entries);
- gst_matroska_read_common_postprocess_toc_entries (toc->entries,
+ if (gst_toc_get_entries (toc) != NULL) {
+ gst_matroska_read_common_postprocess_toc_entries (gst_toc_get_entries (toc),
common->segment.duration, "");
common->toc = toc;
} else
- gst_toc_free (toc);
+ gst_toc_unref (toc);
common->chapters_parsed = TRUE;
@@ -1705,6 +1703,7 @@
GST_DEBUG_OBJECT (common, "Title: %s", GST_STR_NULL (text));
taglist = gst_tag_list_new (GST_TAG_TITLE, text, NULL);
+ gst_tag_list_set_scope (taglist, GST_TAG_SCOPE_GLOBAL);
gst_matroska_read_common_found_global_tag (common, el, taglist);
g_free (text);
break;
@@ -1921,7 +1920,7 @@
GST_WARNING_OBJECT (common,
"Found chapter/edition specific tag, but TOC doesn't present");
else {
- cur = common->toc->entries;
+ cur = gst_toc_get_entries (common->toc);
while (cur != NULL) {
gst_matroska_read_common_parse_toc_tag (cur->data, edition_targets,
chapter_targets, taglist);
@@ -1932,7 +1931,7 @@
} else
gst_tag_list_insert (*p_taglist, taglist, GST_TAG_MERGE_APPEND);
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
g_array_unref (chapter_targets);
g_array_unref (edition_targets);
@@ -1975,6 +1974,7 @@
}
taglist = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (taglist, GST_TAG_SCOPE_GLOBAL);
common->toc_updated = FALSE;
while (ret == GST_FLOW_OK && gst_ebml_read_has_remaining (ebml, 1, TRUE)) {
@@ -1999,7 +1999,7 @@
if (G_LIKELY (!gst_tag_list_is_empty (taglist)))
gst_matroska_read_common_found_global_tag (common, el, taglist);
else
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
return ret;
}
diff --git a/gst/monoscope/Makefile.in b/gst/monoscope/Makefile.in
index 7d463c8..c4e3e3f 100644
--- a/gst/monoscope/Makefile.in
+++ b/gst/monoscope/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/monoscope/gstmonoscope.c b/gst/monoscope/gstmonoscope.c
index 6850a24..3bf1fda 100644
--- a/gst/monoscope/gstmonoscope.c
+++ b/gst/monoscope/gstmonoscope.c
@@ -214,7 +214,7 @@
monoscope->visstate = monoscope_init (monoscope->width, monoscope->height);
- res = gst_pad_push_event (monoscope->srcpad, gst_event_new_caps (caps));
+ res = gst_pad_set_caps (monoscope->srcpad, caps);
return res && (monoscope->visstate != NULL);
}
diff --git a/gst/multifile/Makefile.in b/gst/multifile/Makefile.in
index bbd9bd1..4589f12 100644
--- a/gst/multifile/Makefile.in
+++ b/gst/multifile/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -253,7 +253,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/multifile/gstsplitfilesrc.c b/gst/multifile/gstsplitfilesrc.c
index 86313bf..b58c59a 100644
--- a/gst/multifile/gstsplitfilesrc.c
+++ b/gst/multifile/gstsplitfilesrc.c
@@ -30,19 +30,18 @@
* directories). The results will be sorted.
*
* <refsect2>
- * <title>Example launch line</title>
+ * <title>Example launch lines</title>
* |[
- * gst-launch splitfilesrc location="/path/to/part-*.mpg" ! decodebin ! ... \
+ * gst-launch splitfilesrc location="/path/to/part-*.mpg" ! decodebin ! ...
* ]| Plays the different parts as if they were one single MPEG file.
+ * |[
+ * gst-launch playbin uri="splitfile://path/to/foo.avi.*"
+ * ]| Plays the different parts as if they were one single AVI file.
* </refsect2>
*
* Since: 0.10.31
*/
-/* TODO:
- * - implement splitfile:// URI handler?
- */
-
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -65,6 +64,8 @@
#define DEFAULT_LOCATION NULL
+static void gst_split_file_src_uri_handler_init (gpointer g_iface,
+ gpointer iface_data);
static void gst_split_file_src_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_split_file_src_get_property (GObject * object, guint prop_id,
@@ -88,7 +89,10 @@
GST_DEBUG_CATEGORY_STATIC (splitfilesrc_debug);
#define GST_CAT_DEFAULT splitfilesrc_debug
-G_DEFINE_TYPE (GstSplitFileSrc, gst_split_file_src, GST_TYPE_BASE_SRC);
+
+G_DEFINE_TYPE_WITH_CODE (GstSplitFileSrc, gst_split_file_src, GST_TYPE_BASE_SRC,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ gst_split_file_src_uri_handler_init));
#ifdef G_OS_WIN32
#define WIN32_BLURB " Location string must be in UTF-8 encoding (on Windows)."
@@ -183,6 +187,25 @@
}
static void
+gst_split_file_src_set_location (GstSplitFileSrc * src, const char *location)
+{
+ GST_OBJECT_LOCK (src);
+ g_free (src->location);
+
+ if (location != NULL && g_str_has_prefix (location, "splitfile://"))
+ src->location = gst_uri_get_location (location);
+ else
+ src->location = g_strdup (location);
+#ifdef G_OS_WIN32
+ if (!g_utf8_validate (src->location, -1, NULL)) {
+ g_warning ("splitfilesrc 'location' property must be in UTF-8 "
+ "encoding on Windows");
+ }
+#endif
+ GST_OBJECT_UNLOCK (src);
+}
+
+static void
gst_split_file_src_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
@@ -190,16 +213,7 @@
switch (prop_id) {
case PROP_LOCATION:
- GST_OBJECT_LOCK (src);
- g_free (src->location);
- src->location = g_value_dup_string (value);
-#ifdef G_OS_WIN32
- if (!g_utf8_validate (src->location, -1, NULL)) {
- g_warning ("splitfilesrc 'location' property must be in UTF-8 "
- "encoding on Windows");
- }
-#endif
- GST_OBJECT_UNLOCK (src);
+ gst_split_file_src_set_location (src, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -603,3 +617,55 @@
return GST_FLOW_FLUSHING;
}
}
+
+static guint
+gst_split_file_src_uri_get_type (GType type)
+{
+ return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_split_file_src_uri_get_protocols (GType type)
+{
+ static const gchar *protocols[] = { "splitfile", NULL };
+
+ return (const gchar * const *) protocols;
+}
+
+static gchar *
+gst_split_file_src_uri_get_uri (GstURIHandler * handler)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (handler);
+ gchar *ret;
+
+ GST_OBJECT_LOCK (src);
+ if (src->location != NULL)
+ ret = g_strdup_printf ("splitfile://%s", src->location);
+ else
+ ret = NULL;
+ GST_OBJECT_UNLOCK (src);
+
+ return ret;
+}
+
+static gboolean
+gst_split_file_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
+{
+ GstSplitFileSrc *src = GST_SPLIT_FILE_SRC (handler);
+
+ gst_split_file_src_set_location (src, uri);
+
+ return TRUE;
+}
+
+static void
+gst_split_file_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+ iface->get_type = gst_split_file_src_uri_get_type;
+ iface->get_protocols = gst_split_file_src_uri_get_protocols;
+ iface->get_uri = gst_split_file_src_uri_get_uri;
+ iface->set_uri = gst_split_file_src_uri_set_uri;
+}
diff --git a/gst/multipart/Makefile.in b/gst/multipart/Makefile.in
index 3606fce..acb3447 100644
--- a/gst/multipart/Makefile.in
+++ b/gst/multipart/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index 540b298..8859d73 100644
--- a/gst/multipart/multipartdemux.c
+++ b/gst/multipart/multipartdemux.c
@@ -55,21 +55,12 @@
GST_DEBUG_CATEGORY_STATIC (gst_multipart_demux_debug);
#define GST_CAT_DEFAULT gst_multipart_demux_debug
-/* signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-#define DEFAULT_AUTOSCAN FALSE
#define DEFAULT_BOUNDARY NULL
#define DEFAULT_SINGLE_STREAM FALSE
enum
{
PROP_0,
- PROP_AUTOSCAN,
PROP_BOUNDARY,
PROP_SINGLE_STREAM
};
@@ -148,11 +139,6 @@
DEFAULT_BOUNDARY,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_AUTOSCAN,
- g_param_spec_boolean ("autoscan", "autoscan",
- "Try to autofind the prefix (deprecated unused, see boundary)",
- DEFAULT_AUTOSCAN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
/**
* GstMultipartDemux::single-stream:
*
@@ -203,7 +189,6 @@
multipart->content_length = -1;
multipart->header_completed = FALSE;
multipart->scanpos = 0;
- multipart->autoscan = DEFAULT_AUTOSCAN;
multipart->singleStream = DEFAULT_SINGLE_STREAM;
}
@@ -609,8 +594,8 @@
gst_pad_push_event (srcpad->pad, gst_event_new_segment (&segment));
tags = gst_tag_list_new (GST_TAG_CONTAINER_FORMAT, "Multipart", NULL);
- gst_pad_push_event (srcpad->pad, gst_event_new_tag ("GstDemuxer",
- tags));
+ gst_tag_list_set_scope (tags, GST_TAG_SCOPE_GLOBAL);
+ gst_pad_push_event (srcpad->pad, gst_event_new_tag (tags));
GST_BUFFER_TIMESTAMP (outbuf) = 0;
} else {
@@ -675,7 +660,6 @@
{
GstMultipartDemux *filter;
- g_return_if_fail (GST_IS_MULTIPART_DEMUX (object));
filter = GST_MULTIPART_DEMUX (object);
switch (prop_id) {
@@ -687,9 +671,6 @@
filter->boundary_len = strlen (filter->boundary);
}
break;
- case PROP_AUTOSCAN:
- filter->autoscan = g_value_get_boolean (value);
- break;
case PROP_SINGLE_STREAM:
filter->singleStream = g_value_get_boolean (value);
break;
@@ -705,16 +686,12 @@
{
GstMultipartDemux *filter;
- g_return_if_fail (GST_IS_MULTIPART_DEMUX (object));
filter = GST_MULTIPART_DEMUX (object);
switch (prop_id) {
case PROP_BOUNDARY:
g_value_set_string (value, filter->boundary);
break;
- case PROP_AUTOSCAN:
- g_value_set_boolean (value, filter->autoscan);
- break;
case PROP_SINGLE_STREAM:
g_value_set_boolean (value, filter->singleStream);
break;
diff --git a/gst/multipart/multipartdemux.h b/gst/multipart/multipartdemux.h
index ed8f4f1..48e901b 100644
--- a/gst/multipart/multipartdemux.h
+++ b/gst/multipart/multipartdemux.h
@@ -79,9 +79,6 @@
gchar *mime_type;
gint content_length;
- /* deprecated, unused */
- gboolean autoscan;
-
/* Index inside the current data when manually looking for the boundary */
gint scanpos;
diff --git a/gst/replaygain/Makefile.in b/gst/replaygain/Makefile.in
index 0f9b0bd..955685c 100644
--- a/gst/replaygain/Makefile.in
+++ b/gst/replaygain/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -252,7 +252,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/replaygain/gstrganalysis.c b/gst/replaygain/gstrganalysis.c
index 76b9dcb..af256bf 100644
--- a/gst/replaygain/gstrganalysis.c
+++ b/gst/replaygain/gstrganalysis.c
@@ -634,11 +634,7 @@
GST_TAG_REFERENCE_LEVEL, filter->reference_level, NULL);
/* This steals our reference to the list: */
gst_pad_push_event (GST_BASE_TRANSFORM_SRC_PAD (GST_BASE_TRANSFORM
- (filter)), gst_event_new_tag ("GstAnalysis",
- gst_tag_list_copy (tag_list)));
- /* special case element, also post here */
- gst_element_post_message (GST_ELEMENT_CAST (filter),
- gst_message_new_tag (GST_OBJECT (filter), tag_list));
+ (filter)), gst_event_new_tag (gst_tag_list_ref (tag_list)));
}
}
diff --git a/gst/rtp/Makefile.in b/gst/rtp/Makefile.in
index 9e40ac4..365ee8b 100644
--- a/gst/rtp/Makefile.in
+++ b/gst/rtp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -288,7 +288,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c
index ae7d05a..85e9166 100644
--- a/gst/rtp/gstasteriskh263.c
+++ b/gst/rtp/gstasteriskh263.c
@@ -127,9 +127,6 @@
asteriskh263 = GST_ASTERISK_H263 (parent);
- if (!gst_rtp_buffer_validate (buf))
- goto bad_packet;
-
{
gint payload_len;
guint8 *payload;
@@ -140,7 +137,8 @@
GstRTPBuffer rtp = { NULL };
GstMapInfo map;
- gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
+ if (!gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp))
+ goto bad_packet;
payload_len = gst_rtp_buffer_get_payload_len (&rtp);
payload = gst_rtp_buffer_get_payload (&rtp);
diff --git a/gst/rtp/gstrtpL16depay.c b/gst/rtp/gstrtpL16depay.c
index a842695..c8d6e74 100644
--- a/gst/rtp/gstrtpL16depay.c
+++ b/gst/rtp/gstrtpL16depay.c
@@ -101,7 +101,6 @@
static void
gst_rtp_L16_depay_init (GstRtpL16Depay * rtpL16depay)
{
- /* needed because of GST_BOILERPLATE */
}
static gint
diff --git a/gst/rtp/gstrtph263ppay.c b/gst/rtp/gstrtph263ppay.c
index bb10cda..c944a0f 100644
--- a/gst/rtp/gstrtph263ppay.c
+++ b/gst/rtp/gstrtph263ppay.c
@@ -63,7 +63,7 @@
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-h263, " "variant = (string) \"itu\"")
+ GST_STATIC_CAPS ("video/x-h263, variant = (string) itu")
);
/*
@@ -244,7 +244,20 @@
peercaps =
gst_pad_peer_query_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), filter);
- if (!peercaps)
+
+ /* if we're just outputting to udpsink or fakesink or so, we should also
+ * accept any input compatible with our sink template caps */
+ if (!peercaps || gst_caps_is_any (peercaps))
+ return
+ gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
+
+ /* We basically need to differentiate two use-cases here: One where there's
+ * a capsfilter after the payloader with caps created from an SDP; in this
+ * case the filter caps are fixed and we want to signal to an encoder what
+ * we want it to produce. The second case is simply payloader ! depayloader
+ * where we are dealing with the depayloader's template caps. In this case
+ * we should accept any input compatible with our sink template caps. */
+ if (!gst_caps_is_fixed (peercaps))
return
gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
diff --git a/gst/rtp/gstrtph264depay.c b/gst/rtp/gstrtph264depay.c
index 1739c2d..c49aaa2 100644
--- a/gst/rtp/gstrtph264depay.c
+++ b/gst/rtp/gstrtph264depay.c
@@ -31,17 +31,10 @@
GST_DEBUG_CATEGORY_STATIC (rtph264depay_debug);
#define GST_CAT_DEFAULT (rtph264depay_debug)
-#define DEFAULT_BYTE_STREAM TRUE
-#define DEFAULT_ACCESS_UNIT FALSE
-
-enum
-{
- PROP_0,
- PROP_BYTE_STREAM,
- PROP_ACCESS_UNIT,
- PROP_LAST
-};
-
+/* This is what we'll default to when downstream hasn't
+ * expressed a restriction or preference via caps */
+#define DEFAULT_BYTE_STREAM TRUE
+#define DEFAULT_ACCESS_UNIT FALSE
/* 3 zero bytes syncword */
static const guint8 sync_bytes[] = { 0, 0, 0, 1 };
@@ -88,10 +81,6 @@
GST_TYPE_RTP_BASE_DEPAYLOAD);
static void gst_rtp_h264_depay_finalize (GObject * object);
-static void gst_rtp_h264_depay_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_rtp_h264_depay_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
static GstStateChangeReturn gst_rtp_h264_depay_change_state (GstElement *
element, GstStateChange transition);
@@ -116,18 +105,6 @@
gobject_class->finalize = gst_rtp_h264_depay_finalize;
- gobject_class->set_property = gst_rtp_h264_depay_set_property;
- gobject_class->get_property = gst_rtp_h264_depay_get_property;
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BYTE_STREAM,
- g_param_spec_boolean ("byte-stream", "Byte Stream",
- "Generate byte stream format of NALU (deprecated; use caps)",
- DEFAULT_BYTE_STREAM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_ACCESS_UNIT,
- g_param_spec_boolean ("access-unit", "Access Unit",
- "Merge NALU into AU (picture) (deprecated; use caps)",
- DEFAULT_ACCESS_UNIT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_h264_depay_src_template));
gst_element_class_add_pad_template (gstelement_class,
@@ -195,48 +172,6 @@
}
static void
-gst_rtp_h264_depay_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstRtpH264Depay *rtph264depay;
-
- rtph264depay = GST_RTP_H264_DEPAY (object);
-
- switch (prop_id) {
- case PROP_BYTE_STREAM:
- rtph264depay->byte_stream = g_value_get_boolean (value);
- break;
- case PROP_ACCESS_UNIT:
- rtph264depay->merge = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_rtp_h264_depay_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstRtpH264Depay *rtph264depay;
-
- rtph264depay = GST_RTP_H264_DEPAY (object);
-
- switch (prop_id) {
- case PROP_BYTE_STREAM:
- g_value_set_boolean (value, rtph264depay->byte_stream);
- break;
- case PROP_ACCESS_UNIT:
- g_value_set_boolean (value, rtph264depay->merge);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
gst_rtp_h264_depay_negotiate (GstRtpH264Depay * rtph264depay)
{
GstCaps *caps;
@@ -276,22 +211,22 @@
gst_caps_unref (caps);
}
- if (byte_stream >= 0) {
+ if (byte_stream != -1) {
GST_DEBUG_OBJECT (rtph264depay, "downstream requires byte-stream %d",
byte_stream);
- if (rtph264depay->byte_stream != byte_stream) {
- GST_WARNING_OBJECT (rtph264depay,
- "overriding property setting based on caps");
- rtph264depay->byte_stream = byte_stream;
- }
+ rtph264depay->byte_stream = byte_stream;
+ } else {
+ GST_DEBUG_OBJECT (rtph264depay, "defaulting to byte-stream %d",
+ DEFAULT_BYTE_STREAM);
+ rtph264depay->byte_stream = DEFAULT_BYTE_STREAM;
}
- if (merge >= 0) {
+ if (merge != -1) {
GST_DEBUG_OBJECT (rtph264depay, "downstream requires merge %d", merge);
- if (rtph264depay->merge != merge) {
- GST_WARNING_OBJECT (rtph264depay,
- "overriding property setting based on caps");
- rtph264depay->merge = merge;
- }
+ rtph264depay->merge = merge;
+ } else {
+ GST_DEBUG_OBJECT (rtph264depay, "defaulting to merge %d",
+ DEFAULT_ACCESS_UNIT);
+ rtph264depay->merge = DEFAULT_ACCESS_UNIT;
}
}
@@ -761,7 +696,7 @@
"all-headers", G_TYPE_BOOLEAN, TRUE, NULL)));
gst_buffer_unmap (nal, &map);
gst_buffer_unref (nal);
- return FALSE;
+ return NULL;
}
if (rtph264depay->new_codec_data &&
@@ -872,17 +807,14 @@
rtph264depay->current_fu_type = 0;
- if (send) {
- outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
- rtph264depay->fu_timestamp, rtph264depay->fu_marker);
- if (outbuf)
- gst_rtp_base_depayload_push (GST_RTP_BASE_DEPAYLOAD (rtph264depay),
- outbuf);
- return NULL;
- } else {
- return gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
- rtph264depay->fu_timestamp, rtph264depay->fu_marker);
+ outbuf = gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf,
+ rtph264depay->fu_timestamp, rtph264depay->fu_marker);
+
+ if (send && outbuf) {
+ gst_rtp_base_depayload_push (GST_RTP_BASE_DEPAYLOAD (rtph264depay), outbuf);
+ outbuf = NULL;
}
+ return outbuf;
}
static GstBuffer *
diff --git a/gst/rtp/gstrtph264pay.c b/gst/rtp/gstrtph264pay.c
index 7319526..0e8bf97 100644
--- a/gst/rtp/gstrtph264pay.c
+++ b/gst/rtp/gstrtph264pay.c
@@ -33,8 +33,6 @@
#define IDR_TYPE_ID 5
#define SPS_TYPE_ID 7
#define PPS_TYPE_ID 8
-#define USE_MEMCMP
-
GST_DEBUG_CATEGORY_STATIC (rtph264pay_debug);
#define GST_CAT_DEFAULT (rtph264pay_debug)
@@ -49,9 +47,9 @@
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("video/x-h264, "
- "stream-format = (string) byte-stream, alignment = (string) { nal, au };"
+ "stream-format = (string) avc, alignment = (string) au;"
"video/x-h264, "
- "stream-format = (string) avc, alignment = (string) au")
+ "stream-format = (string) byte-stream, alignment = (string) { nal, au }")
);
static GstStaticPadTemplate gst_rtp_h264_pay_src_template =
@@ -64,42 +62,13 @@
"clock-rate = (int) 90000, " "encoding-name = (string) \"H264\"")
);
-#define GST_TYPE_H264_SCAN_MODE (gst_h264_scan_mode_get_type())
-static GType
-gst_h264_scan_mode_get_type (void)
-{
- static GType h264_scan_mode_type = 0;
- static const GEnumValue h264_scan_modes[] = {
- {GST_H264_SCAN_MODE_BYTESTREAM,
- "Scan complete bytestream for NALUs",
- "bytestream"},
- {GST_H264_SCAN_MODE_MULTI_NAL, "Buffers contain multiple complete NALUs",
- "multiple"},
- {GST_H264_SCAN_MODE_SINGLE_NAL, "Buffers contain a single complete NALU",
- "single"},
- {0, NULL, NULL},
- };
-
- if (!h264_scan_mode_type) {
- h264_scan_mode_type =
- g_enum_register_static ("GstH264PayScanMode", h264_scan_modes);
- }
- return h264_scan_mode_type;
-}
-
-#define DEFAULT_PROFILE_LEVEL_ID NULL
#define DEFAULT_SPROP_PARAMETER_SETS NULL
-#define DEFAULT_SCAN_MODE GST_H264_SCAN_MODE_MULTI_NAL
-#define DEFAULT_BUFFER_LIST FALSE
#define DEFAULT_CONFIG_INTERVAL 0
enum
{
PROP_0,
- PROP_PROFILE_LEVEL_ID,
PROP_SPROP_PARAMETER_SETS,
- PROP_SCAN_MODE,
- PROP_BUFFER_LIST,
PROP_CONFIG_INTERVAL,
PROP_LAST
};
@@ -142,13 +111,6 @@
gobject_class->get_property = gst_rtp_h264_pay_get_property;
g_object_class_install_property (G_OBJECT_CLASS (klass),
- PROP_PROFILE_LEVEL_ID, g_param_spec_string ("profile-level-id",
- "profile-level-id",
- "The base64 profile-level-id to set in the sink caps (deprecated)",
- DEFAULT_PROFILE_LEVEL_ID,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (G_OBJECT_CLASS (klass),
PROP_SPROP_PARAMETER_SETS, g_param_spec_string ("sprop-parameter-sets",
"sprop-parameter-sets",
"The base64 sprop-parameter-sets to set in out caps (set to NULL to "
@@ -156,18 +118,6 @@
DEFAULT_SPROP_PARAMETER_SETS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SCAN_MODE,
- g_param_spec_enum ("scan-mode", "Scan Mode",
- "How to scan the input buffers for NAL units. Performance can be "
- "increased when certain assumptions are made about the input buffers",
- GST_TYPE_H264_SCAN_MODE, DEFAULT_SCAN_MODE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
- g_param_spec_boolean ("buffer-list", "Buffer List",
- "Use Buffer Lists",
- DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (G_OBJECT_CLASS (klass),
PROP_CONFIG_INTERVAL,
g_param_spec_uint ("config-interval",
@@ -210,8 +160,6 @@
rtph264pay->sps = NULL;
rtph264pay->pps = NULL;
rtph264pay->last_spspps = -1;
- rtph264pay->scan_mode = GST_H264_SCAN_MODE_MULTI_NAL;
- rtph264pay->buffer_list = DEFAULT_BUFFER_LIST;
rtph264pay->spspps_interval = DEFAULT_CONFIG_INTERVAL;
rtph264pay->adapter = gst_adapter_new ();
@@ -246,7 +194,7 @@
G_OBJECT_CLASS (parent_class)->finalize (object);
}
-static const gchar *all_levels[] = {
+static const gchar all_levels[][4] = {
"1",
"1b",
"1.1",
@@ -262,8 +210,7 @@
"4.1",
"4.2",
"5",
- "5.1",
- NULL
+ "5.1"
};
static GstCaps *
@@ -351,7 +298,7 @@
g_value_init (&levels, GST_TYPE_LIST);
g_value_init (&val, G_TYPE_STRING);
- for (j = 0; all_levels[j]; j++) {
+ for (j = 0; j < G_N_ELEMENTS (all_levels); j++) {
g_value_set_static_string (&val, all_levels[j]);
gst_value_list_prepend_value (&levels, &val);
if (!strcmp (level, all_levels[j]))
@@ -461,7 +408,7 @@
guint8 *data;
gsize size;
GstBuffer *buffer;
- const gchar *alignment;
+ const gchar *alignment, *stream_format;
rtph264pay = GST_RTP_H264_PAY (basepayload);
@@ -471,11 +418,23 @@
* NALs */
gst_rtp_base_payload_set_options (basepayload, "video", TRUE, "H264", 90000);
+ rtph264pay->alignment = GST_H264_ALIGNMENT_UNKNOWN;
alignment = gst_structure_get_string (str, "alignment");
- if (alignment && !strcmp (alignment, "au"))
- rtph264pay->au_alignment = TRUE;
- else
- rtph264pay->au_alignment = FALSE;
+ if (alignment) {
+ if (g_str_equal (alignment, "au"))
+ rtph264pay->alignment = GST_H264_ALIGNMENT_AU;
+ if (g_str_equal (alignment, "nal"))
+ rtph264pay->alignment = GST_H264_ALIGNMENT_NAL;
+ }
+
+ rtph264pay->stream_format = GST_H264_STREAM_FORMAT_UNKNOWN;
+ stream_format = gst_structure_get_string (str, "stream-format");
+ if (stream_format) {
+ if (g_str_equal (stream_format, "avc"))
+ rtph264pay->stream_format = GST_H264_STREAM_FORMAT_AVC;
+ if (g_str_equal (stream_format, "bytestream"))
+ rtph264pay->stream_format = GST_H264_STREAM_FORMAT_BYTESTREAM;
+ }
/* packetized AVC video has a codec_data */
if ((value = gst_structure_get_value (str, "codec_data"))) {
@@ -483,7 +442,6 @@
gint i, nal_size;
GST_DEBUG_OBJECT (rtph264pay, "have packetized h264");
- rtph264pay->packetized = TRUE;
buffer = gst_value_get_buffer (value);
@@ -578,7 +536,6 @@
goto set_sps_pps_failed;
} else {
GST_DEBUG_OBJECT (rtph264pay, "have bytestream h264");
- rtph264pay->packetized = FALSE;
}
return TRUE;
@@ -826,7 +783,7 @@
static GstFlowReturn
gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
const guint8 * data, guint size, GstClockTime dts, GstClockTime pts,
- GstBuffer * buffer_orig, gboolean end_of_au);
+ gboolean end_of_au);
static GstFlowReturn
gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
@@ -843,7 +800,7 @@
/* resend SPS */
gst_buffer_map (sps_buf, &map, GST_MAP_READ);
ret = gst_rtp_h264_pay_payload_nal (basepayload,
- map.data, map.size, dts, pts, sps_buf, FALSE);
+ map.data, map.size, dts, pts, FALSE);
gst_buffer_unmap (sps_buf, &map);
/* Not critical here; but throw a warning */
if (ret != GST_FLOW_OK)
@@ -856,7 +813,7 @@
/* resend PPS */
gst_buffer_map (pps_buf, &map, GST_MAP_READ);
ret = gst_rtp_h264_pay_payload_nal (basepayload,
- map.data, map.size, dts, pts, pps_buf, FALSE);
+ map.data, map.size, dts, pts, FALSE);
gst_buffer_unmap (pps_buf, &map);
/* Not critical here; but throw a warning */
if (ret != GST_FLOW_OK)
@@ -872,7 +829,7 @@
static GstFlowReturn
gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
const guint8 * data, guint size, GstClockTime dts, GstClockTime pts,
- GstBuffer * buffer_orig, gboolean end_of_au)
+ gboolean end_of_au)
{
GstRtpH264Pay *rtph264pay;
GstFlowReturn ret;
@@ -880,9 +837,7 @@
guint packet_len, payload_len, mtu;
GstBuffer *outbuf;
guint8 *payload;
-#if 0
GstBufferList *list = NULL;
-#endif
gboolean send_spspps;
GstRTPBuffer rtp = { NULL };
@@ -947,19 +902,10 @@
"NAL Unit fit in one packet datasize=%d mtu=%d", size, mtu);
/* will fit in one packet */
-#if 0
- if (rtph264pay->buffer_list) {
- /* use buffer lists
- * first create buffer without payload containing only the RTP header
- * and then another buffer containing the payload. both buffers will
- * be then added to the list */
- outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
- } else
-#endif
- {
- /* use the old-fashioned way with a single buffer and memcpy */
- outbuf = gst_rtp_buffer_new_allocate (size, 0, 0);
- }
+ /* use buffer lists
+ * create buffer without payload containing only the RTP header
+ * (memory block at index 0) */
+ outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
@@ -972,37 +918,20 @@
GST_BUFFER_PTS (outbuf) = pts;
GST_BUFFER_DTS (outbuf) = dts;
-#if 0
- if (rtph264pay->buffer_list) {
- GstBuffer *paybuf;
+ /* insert payload memory block */
+ gst_buffer_append_memory (outbuf,
+ gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (guint8*) data,
+ size, 0, size, NULL, NULL));
- /* create another buffer with the payload. */
- if (buffer_orig)
- paybuf = gst_buffer_create_sub (buffer_orig, data -
- GST_BUFFER_DATA (buffer_orig), size);
- else {
- paybuf = gst_buffer_new_and_alloc (size);
- gst_buffer_fill (paybuf, 0, data, size);
- }
+ list = gst_buffer_list_new ();
- list = gst_buffer_list_new ();
+ /* add the buffer to the buffer list */
+ gst_buffer_list_add (list, outbuf);
- /* add both buffers to the buffer list */
- gst_buffer_list_add (list, outbuf);
- gst_buffer_list_add (list, paybuf);
+ gst_rtp_buffer_unmap (&rtp);
- /* push the list to the next element in the pipe */
- ret = gst_rtp_base_payload_push_list (basepayload, list);
- } else
-#endif
- {
- payload = gst_rtp_buffer_get_payload (&rtp);
- GST_DEBUG_OBJECT (basepayload, "Copying %d bytes to outbuf", size);
- memcpy (payload, data, size);
- gst_rtp_buffer_unmap (&rtp);
-
- ret = gst_rtp_base_payload_push (basepayload, outbuf);
- }
+ /* push the list to the next element in the pipe */
+ ret = gst_rtp_base_payload_push_list (basepayload, list);
} else {
/* fragmentation Units FU-A */
guint8 nalHeader;
@@ -1024,12 +953,7 @@
/* We keep 2 bytes for FU indicator and FU Header */
payload_len = gst_rtp_buffer_calc_payload_len (mtu - 2, 0, 0);
-#if 0
- if (rtph264pay->buffer_list) {
- list = gst_buffer_list_new ();
- it = gst_buffer_list_iterate (list);
- }
-#endif
+ list = gst_buffer_list_new ();
while (end == 0) {
limitedSize = size < payload_len ? size : payload_len;
@@ -1037,20 +961,10 @@
"Inside FU-A fragmentation limitedSize=%d iteration=%d", limitedSize,
ii);
-#if 0
- if (rtph264pay->buffer_list) {
- /* use buffer lists
- * first create buffer without payload containing only the RTP header
- * and then another buffer containing the payload. both buffers will
- * be then added to the list */
- outbuf = gst_rtp_buffer_new_allocate (2, 0, 0);
- } else
-#endif
- {
- /* use the old-fashioned way with a single buffer and memcpy
- * first create buffer to hold the payload */
- outbuf = gst_rtp_buffer_new_allocate (limitedSize + 2, 0, 0);
- }
+ /* use buffer lists
+ * create buffer without payload containing only the RTP header
+ * (memory block at index 0) */
+ outbuf = gst_rtp_buffer_new_allocate (2, 0, 0);
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
@@ -1072,39 +986,15 @@
/* FU Header */
payload[1] = (start << 7) | (end << 6) | (nalHeader & 0x1f);
-#if 0
- if (rtph264pay->buffer_list) {
- GstBuffer *paybuf;
+ /* insert payload memory block */
+ gst_buffer_append_memory (outbuf,
+ gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (guint8 *) data + pos,
+ limitedSize, 0, limitedSize, NULL, NULL));
- /* create another buffer to hold the payload */
- if (buffer_orig)
- paybuf = gst_buffer_create_sub (buffer_orig, data -
- GST_BUFFER_DATA (buffer_orig) + pos, limitedSize);
- else {
- paybuf = gst_buffer_new_and_alloc (limitedSize);
- memcpy (GST_BUFFER_DATA (paybuf), data + pos, limitedSize);
- }
+ /* add the buffer to the buffer list */
+ gst_buffer_list_add (list, outbuf);
- /* create a new group to hold the header and the payload */
- gst_buffer_list_iterator_add_group (it);
-
- /* add both buffers to the buffer list */
- gst_buffer_list_iterator_add (it, outbuf);
- gst_buffer_list_iterator_add (it, paybuf);
-
- } else
-#endif
- {
- memcpy (&payload[2], data + pos, limitedSize);
- gst_rtp_buffer_unmap (&rtp);
- GST_DEBUG_OBJECT (basepayload,
- "recorded %d payload bytes into packet iteration=%d",
- limitedSize + 2, ii);
-
- ret = gst_rtp_base_payload_push (basepayload, outbuf);
- if (ret != GST_FLOW_OK)
- break;
- }
+ gst_rtp_buffer_unmap (&rtp);
size -= limitedSize;
pos += limitedSize;
@@ -1112,13 +1002,7 @@
start = 0;
}
-#if 0
- if (rtph264pay->buffer_list) {
- /* free iterator and push the whole buffer list at once */
- gst_buffer_list_iterator_free (it);
- ret = gst_rtp_base_payload_push_list (basepayload, list);
- }
-#endif
+ ret = gst_rtp_base_payload_push_list (basepayload, list);
}
return ret;
}
@@ -1136,15 +1020,22 @@
GstClockTime dts, pts;
GArray *nal_queue;
guint pushed = 0;
- gboolean bytestream;
+ gboolean avc;
rtph264pay = GST_RTP_H264_PAY (basepayload);
/* the input buffer contains one or more NAL units */
- bytestream = (rtph264pay->scan_mode == GST_H264_SCAN_MODE_BYTESTREAM);
+ avc = rtph264pay->stream_format = GST_H264_STREAM_FORMAT_AVC;
- if (bytestream) {
+ if (avc) {
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ data = map.data;
+ size = map.size;
+ pts = GST_BUFFER_PTS (buffer);
+ dts = GST_BUFFER_DTS (buffer);
+ GST_DEBUG_OBJECT (basepayload, "got %" G_GSIZE_FORMAT " bytes", size);
+ } else {
dts = gst_adapter_prev_dts (rtph264pay->adapter, NULL);
pts = gst_adapter_prev_pts (rtph264pay->adapter, NULL);
gst_adapter_push (rtph264pay->adapter, buffer);
@@ -1158,13 +1049,6 @@
dts = GST_BUFFER_DTS (buffer);
if (!GST_CLOCK_TIME_IS_VALID (pts))
pts = GST_BUFFER_PTS (buffer);
- } else {
- gst_buffer_map (buffer, &map, GST_MAP_READ);
- data = map.data;
- size = map.size;
- pts = GST_BUFFER_PTS (buffer);
- dts = GST_BUFFER_DTS (buffer);
- GST_DEBUG_OBJECT (basepayload, "got %" G_GSIZE_FORMAT " bytes", size);
}
ret = GST_FLOW_OK;
@@ -1173,7 +1057,7 @@
* FIXME, we should really try to pack multiple NAL units into one RTP packet
* if we can, especially for the config packets that wont't cause decoder
* latency. */
- if (rtph264pay->packetized) {
+ if (avc) {
guint nal_length_size;
nal_length_size = rtph264pay->nal_length_size;
@@ -1202,13 +1086,14 @@
/* If we're at the end of the buffer, then we're at the end of the
* access unit
*/
- if (rtph264pay->au_alignment && size - nal_len <= nal_length_size) {
+ if (rtph264pay->alignment == GST_H264_ALIGNMENT_AU
+ && size - nal_len <= nal_length_size) {
end_of_au = TRUE;
}
ret =
gst_rtp_h264_pay_payload_nal (basepayload, data, nal_len, dts, pts,
- buffer, end_of_au);
+ end_of_au);
if (ret != GST_FLOW_OK)
break;
@@ -1241,25 +1126,18 @@
data += 3;
size -= 3;
- if (rtph264pay->scan_mode == GST_H264_SCAN_MODE_SINGLE_NAL) {
- /* we are told that there is only a single NAL in this packet so that we
- * can avoid scanning for the next NAL. */
- next = size;
- } else {
- /* use next_start_code() to scan buffer.
- * next_start_code() returns the offset in data,
- * starting from zero to the first byte of 0.0.0.1
- * If no start code is found, it returns the value of the
- * 'size' parameter.
- * data is unchanged by the call to next_start_code()
- */
- next = next_start_code (data, size);
+ /* use next_start_code() to scan buffer.
+ * next_start_code() returns the offset in data,
+ * starting from zero to the first byte of 0.0.0.1
+ * If no start code is found, it returns the value of the
+ * 'size' parameter.
+ * data is unchanged by the call to next_start_code()
+ */
+ next = next_start_code (data, size);
- if (next == size
- && rtph264pay->scan_mode == GST_H264_SCAN_MODE_BYTESTREAM) {
- /* Didn't find the start of next NAL, handle it next time */
- break;
- }
+ if (next == size) {
+ /* Didn't find the start of next NAL, handle it next time */
+ break;
}
/* nal length is distance to next start code */
@@ -1321,8 +1199,7 @@
* starts with 0x000001 so all the 0x00 bytes at the end of this one are
* trailing 0x0 that can be discarded */
size = nal_len;
- if (i + 1 != nal_queue->len
- || rtph264pay->scan_mode == GST_H264_SCAN_MODE_BYTESTREAM)
+ if (i + 1 != nal_queue->len)
for (; size > 1 && data[size - 1] == 0x0; size--)
/* skip */ ;
@@ -1333,15 +1210,14 @@
* actually payload the NAL so we can know if the current NAL is
* the last one of an access unit or not if we are in bytestream mode
*/
- if (rtph264pay->au_alignment &&
- rtph264pay->scan_mode != GST_H264_SCAN_MODE_BYTESTREAM &&
+ if (rtph264pay->alignment == GST_H264_ALIGNMENT_AU &&
i == nal_queue->len - 1)
end_of_au = TRUE;
/* put the data in one or more RTP packets */
ret =
gst_rtp_h264_pay_payload_nal (basepayload, data, size, dts, pts,
- buffer, end_of_au);
+ end_of_au);
if (ret != GST_FLOW_OK) {
break;
}
@@ -1355,12 +1231,12 @@
}
done:
- if (bytestream) {
- gst_adapter_unmap (rtph264pay->adapter);
- gst_adapter_flush (rtph264pay->adapter, pushed);
- } else {
+ if (avc) {
gst_buffer_unmap (buffer, &map);
gst_buffer_unref (buffer);
+ } else {
+ gst_adapter_unmap (rtph264pay->adapter);
+ gst_adapter_flush (rtph264pay->adapter, pushed);
}
return ret;
@@ -1433,19 +1309,11 @@
rtph264pay = GST_RTP_H264_PAY (object);
switch (prop_id) {
- case PROP_PROFILE_LEVEL_ID:
- break;
case PROP_SPROP_PARAMETER_SETS:
g_free (rtph264pay->sprop_parameter_sets);
rtph264pay->sprop_parameter_sets = g_value_dup_string (value);
rtph264pay->update_caps = TRUE;
break;
- case PROP_SCAN_MODE:
- rtph264pay->scan_mode = g_value_get_enum (value);
- break;
- case PROP_BUFFER_LIST:
- rtph264pay->buffer_list = g_value_get_boolean (value);
- break;
case PROP_CONFIG_INTERVAL:
rtph264pay->spspps_interval = g_value_get_uint (value);
break;
@@ -1464,17 +1332,9 @@
rtph264pay = GST_RTP_H264_PAY (object);
switch (prop_id) {
- case PROP_PROFILE_LEVEL_ID:
- break;
case PROP_SPROP_PARAMETER_SETS:
g_value_set_string (value, rtph264pay->sprop_parameter_sets);
break;
- case PROP_SCAN_MODE:
- g_value_set_enum (value, rtph264pay->scan_mode);
- break;
- case PROP_BUFFER_LIST:
- g_value_set_boolean (value, rtph264pay->buffer_list);
- break;
case PROP_CONFIG_INTERVAL:
g_value_set_uint (value, rtph264pay->spspps_interval);
break;
diff --git a/gst/rtp/gstrtph264pay.h b/gst/rtp/gstrtph264pay.h
index 5438e9b..d5b9dfa 100644
--- a/gst/rtp/gstrtph264pay.h
+++ b/gst/rtp/gstrtph264pay.h
@@ -37,16 +37,23 @@
#define GST_IS_RTP_H264_PAY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_H264_PAY))
-typedef enum
-{
- GST_H264_SCAN_MODE_BYTESTREAM,
- GST_H264_SCAN_MODE_MULTI_NAL,
- GST_H264_SCAN_MODE_SINGLE_NAL
-} GstH264ScanMode;
-
typedef struct _GstRtpH264Pay GstRtpH264Pay;
typedef struct _GstRtpH264PayClass GstRtpH264PayClass;
+typedef enum
+{
+ GST_H264_STREAM_FORMAT_UNKNOWN,
+ GST_H264_STREAM_FORMAT_BYTESTREAM,
+ GST_H264_STREAM_FORMAT_AVC
+} GstH264StreamFormat;
+
+typedef enum
+{
+ GST_H264_ALIGNMENT_UNKNOWN,
+ GST_H264_ALIGNMENT_NAL,
+ GST_H264_ALIGNMENT_AU
+} GstH264Alignment;
+
struct _GstRtpH264Pay
{
GstRTPBasePayload payload;
@@ -54,22 +61,19 @@
guint profile;
GList *sps, *pps;
- gboolean packetized;
- gboolean au_alignment;
+ GstH264StreamFormat stream_format;
+ GstH264Alignment alignment;
guint nal_length_size;
GArray *queue;
gchar *sprop_parameter_sets;
gboolean update_caps;
- GstH264ScanMode scan_mode;
GstAdapter *adapter;
guint spspps_interval;
gboolean send_spspps;
GstClockTime last_spspps;
-
- gboolean buffer_list;
};
struct _GstRtpH264PayClass
diff --git a/gst/rtp/gstrtpj2kdepay.c b/gst/rtp/gstrtpj2kdepay.c
index 4cb6497..2017270 100644
--- a/gst/rtp/gstrtpj2kdepay.c
+++ b/gst/rtp/gstrtpj2kdepay.c
@@ -56,12 +56,9 @@
J2K_MARKER_EOC = 0xD9
} RtpJ2KMarker;
-#define DEFAULT_BUFFER_LIST TRUE
-
enum
{
PROP_0,
- PROP_BUFFER_LIST,
PROP_LAST
};
@@ -100,11 +97,6 @@
gobject_class->set_property = gst_rtp_j2k_depay_set_property;
gobject_class->get_property = gst_rtp_j2k_depay_get_property;
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
- g_param_spec_boolean ("buffer-list", "Buffer List",
- "Use Buffer Lists",
- DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_j2k_depay_src_template));
gst_element_class_add_pad_template (gstelement_class,
@@ -127,8 +119,6 @@
static void
gst_rtp_j2k_depay_init (GstRtpJ2KDepay * rtpj2kdepay)
{
- rtpj2kdepay->buffer_list = DEFAULT_BUFFER_LIST;
-
rtpj2kdepay->pu_adapter = gst_adapter_new ();
rtpj2kdepay->t_adapter = gst_adapter_new ();
rtpj2kdepay->f_adapter = gst_adapter_new ();
@@ -383,13 +373,16 @@
goto done;
if (avail > 2) {
- GstBuffer *outbuf;
+ GList *list, *walk;
+ GstBufferList *buflist;
/* take the last bytes of the JPEG 2000 data to see if there is an EOC
* marker */
gst_adapter_copy (rtpj2kdepay->f_adapter, end, avail - 2, 2);
if (end[0] != 0xff && end[1] != 0xd9) {
+ GstBuffer *outbuf;
+
end[0] = 0xff;
end[1] = 0xd9;
@@ -402,29 +395,18 @@
gst_adapter_push (rtpj2kdepay->f_adapter, outbuf);
avail += 2;
}
-#if 0
- if (rtpj2kdepay->buffer_list) {
- GList *list;
- GstBufferList *buflist;
- GstBufferListIterator *it;
- GST_DEBUG_OBJECT (rtpj2kdepay, "pushing buffer list of %u bytes", avail);
- list = gst_adapter_take_list (rtpj2kdepay->f_adapter, avail);
+ GST_DEBUG_OBJECT (rtpj2kdepay, "pushing buffer list of %u bytes", avail);
+ list = gst_adapter_take_list (rtpj2kdepay->f_adapter, avail);
- buflist = gst_buffer_list_new ();
- it = gst_buffer_list_iterate (buflist);
- gst_buffer_list_iterator_add_group (it);
- gst_buffer_list_iterator_add_list (it, list);
- gst_buffer_list_iterator_free (it);
+ buflist = gst_buffer_list_new ();
- ret = gst_rtp_base_depayload_push_list (depayload, buflist);
- } else
-#endif
- {
- GST_DEBUG_OBJECT (rtpj2kdepay, "pushing buffer of %u bytes", avail);
- outbuf = gst_adapter_take_buffer (rtpj2kdepay->f_adapter, avail);
- ret = gst_rtp_base_depayload_push (depayload, outbuf);
- }
+ for (walk = list; walk; walk = g_list_next (walk))
+ gst_buffer_list_add (buflist, GST_BUFFER_CAST (walk->data));
+
+ g_list_free (list);
+
+ ret = gst_rtp_base_depayload_push_list (depayload, buflist);
} else {
GST_WARNING_OBJECT (rtpj2kdepay, "empty packet");
gst_adapter_clear (rtpj2kdepay->f_adapter);
@@ -607,14 +589,7 @@
gst_rtp_j2k_depay_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
- GstRtpJ2KDepay *rtpj2kdepay;
-
- rtpj2kdepay = GST_RTP_J2K_DEPAY (object);
-
switch (prop_id) {
- case PROP_BUFFER_LIST:
- rtpj2kdepay->buffer_list = g_value_get_boolean (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -625,14 +600,7 @@
gst_rtp_j2k_depay_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
- GstRtpJ2KDepay *rtpj2kdepay;
-
- rtpj2kdepay = GST_RTP_J2K_DEPAY (object);
-
switch (prop_id) {
- case PROP_BUFFER_LIST:
- g_value_set_boolean (value, rtpj2kdepay->buffer_list);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/rtp/gstrtpj2kdepay.h b/gst/rtp/gstrtpj2kdepay.h
index cea9869..020688e 100644
--- a/gst/rtp/gstrtpj2kdepay.h
+++ b/gst/rtp/gstrtpj2kdepay.h
@@ -58,7 +58,6 @@
guint next_frag;
gboolean have_sync;
- gboolean buffer_list;
gint width, height;
};
diff --git a/gst/rtp/gstrtpj2kpay.c b/gst/rtp/gstrtpj2kpay.c
index cbbe877..ed1856a 100644
--- a/gst/rtp/gstrtpj2kpay.c
+++ b/gst/rtp/gstrtpj2kpay.c
@@ -78,12 +78,9 @@
J2K_MARKER_EOC = 0xD9
} RtpJ2KMarker;
-#define DEFAULT_BUFFER_LIST TRUE
-
enum
{
PROP_0,
- PROP_BUFFER_LIST,
PROP_LAST
};
@@ -128,11 +125,6 @@
gobject_class->set_property = gst_rtp_j2k_pay_set_property;
gobject_class->get_property = gst_rtp_j2k_pay_get_property;
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
- g_param_spec_boolean ("buffer-list", "Buffer List",
- "Use Buffer Lists",
- DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_j2k_pay_src_template));
gst_element_class_add_pad_template (gstelement_class,
@@ -153,7 +145,6 @@
static void
gst_rtp_j2k_pay_init (GstRtpJ2KPay * pay)
{
- pay->buffer_list = DEFAULT_BUFFER_LIST;
}
static gboolean
@@ -332,9 +323,7 @@
GstClockTime timestamp;
GstFlowReturn ret = GST_FLOW_ERROR;
RtpJ2KState state;
-#if 0
GstBufferList *list = NULL;
-#endif
GstMapInfo map;
guint mtu, max_size;
guint offset;
@@ -364,12 +353,7 @@
state.next_sot = 0;
state.force_packet = FALSE;
-#if 0
- if (pay->buffer_list) {
- list = gst_buffer_list_new ();
- it = gst_buffer_list_iterate (list);
- }
-#endif
+ list = gst_buffer_list_new ();
/* get max packet length */
max_size = gst_rtp_buffer_calc_payload_len (mtu - HEADER_SIZE, 0, 0);
@@ -421,6 +405,7 @@
while (pu_size > 0) {
guint packet_size, data_size;
+ GstBuffer *paybuf;
/* calculate the packet size */
packet_size =
@@ -439,16 +424,9 @@
payload_size = gst_rtp_buffer_calc_payload_len (packet_size, 0, 0);
data_size = payload_size - HEADER_SIZE;
-#if 0
- if (pay->buffer_list) {
- /* make buffer for header */
- outbuf = gst_rtp_buffer_new_allocate (HEADER_SIZE, 0, 0);
- } else
-#endif
- {
- /* make buffer for header and data */
- outbuf = gst_rtp_buffer_new_allocate (payload_size, 0, 0);
- }
+ /* make buffer for header */
+ outbuf = gst_rtp_buffer_new_allocate (HEADER_SIZE, 0, 0);
+
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
@@ -500,30 +478,15 @@
header[6] = (state.header.offset >> 8) & 0xff;
header[7] = state.header.offset & 0xff;
-#if 0
- if (pay->buffer_list) {
- GstBuffer *paybuf;
+ gst_rtp_buffer_unmap (&rtp);
- /* make subbuffer of j2k data */
- paybuf = gst_buffer_create_sub (buffer, offset, data_size);
+ /* make subbuffer of j2k data */
+ paybuf = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_MEMORY,
+ offset, data_size);
- /* create a new group to hold the header and the payload */
- gst_buffer_list_iterator_add_group (it);
+ outbuf = gst_buffer_append (outbuf, paybuf);
- /* add both buffers to the buffer list */
- gst_buffer_list_iterator_add (it, outbuf);
- gst_buffer_list_iterator_add (it, paybuf);
- } else
-#endif
- {
- /* copy payload */
- memcpy (header + HEADER_SIZE, &map.data[offset], data_size);
- gst_rtp_buffer_unmap (&rtp);
-
- ret = gst_rtp_base_payload_push (basepayload, outbuf);
- if (ret != GST_FLOW_OK)
- goto done;
- }
+ gst_buffer_list_add (list, outbuf);
/* reset header for next round */
state.header.MHF = 0;
@@ -535,16 +498,10 @@
offset = pos;
} while (offset < map.size);
-done:
gst_buffer_unref (buffer);
-#if 0
- if (pay->buffer_list) {
- /* free iterator and push the whole buffer list at once */
- gst_buffer_list_iterator_free (it);
- ret = gst_rtp_base_payload_push_list (basepayload, list);
- }
-#endif
+ /* push the whole buffer list at once */
+ ret = gst_rtp_base_payload_push_list (basepayload, list);
return ret;
}
@@ -553,14 +510,7 @@
gst_rtp_j2k_pay_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
- GstRtpJ2KPay *rtpj2kpay;
-
- rtpj2kpay = GST_RTP_J2K_PAY (object);
-
switch (prop_id) {
- case PROP_BUFFER_LIST:
- rtpj2kpay->buffer_list = g_value_get_boolean (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -571,14 +521,7 @@
gst_rtp_j2k_pay_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
- GstRtpJ2KPay *rtpj2kpay;
-
- rtpj2kpay = GST_RTP_J2K_PAY (object);
-
switch (prop_id) {
- case PROP_BUFFER_LIST:
- g_value_set_boolean (value, rtpj2kpay->buffer_list);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/rtp/gstrtpj2kpay.h b/gst/rtp/gstrtpj2kpay.h
index 83b9ec2..88737d6 100644
--- a/gst/rtp/gstrtpj2kpay.h
+++ b/gst/rtp/gstrtpj2kpay.h
@@ -43,8 +43,6 @@
{
GstRTPBasePayload payload;
- gboolean buffer_list;
-
gint height;
gint width;
};
diff --git a/gst/rtp/gstrtpjpegpay.c b/gst/rtp/gstrtpjpegpay.c
index aaa8cc4..7d93c11 100644
--- a/gst/rtp/gstrtpjpegpay.c
+++ b/gst/rtp/gstrtpjpegpay.c
@@ -69,11 +69,6 @@
*/
#define QUANT_PREFIX_LEN 3
-/*
- * DEFAULT_BUFFER_LIST:
- *
- */
-#define DEFAULT_BUFFER_LIST FALSE
typedef enum _RtpJpegMarker RtpJpegMarker;
@@ -118,7 +113,6 @@
PROP_0,
PROP_JPEG_QUALITY,
PROP_JPEG_TYPE,
- PROP_BUFFER_LIST,
PROP_LAST
};
@@ -276,11 +270,6 @@
"Default JPEG Type, overwritten by SOF when present", 0, 255,
DEFAULT_JPEG_TYPE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
- g_param_spec_boolean ("buffer-list", "Buffer List",
- "Use Buffer Lists",
- DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
GST_DEBUG_CATEGORY_INIT (rtpjpegpay_debug, "rtpjpegpay", 0,
"Motion JPEG RTP Payloader");
}
@@ -291,7 +280,6 @@
pay->quality = DEFAULT_JPEG_QUALITY;
pay->quant = DEFAULT_JPEG_QUANT;
pay->type = DEFAULT_JPEG_TYPE;
- pay->buffer_list = DEFAULT_BUFFER_LIST;
}
static gboolean
@@ -744,9 +732,7 @@
GST_LOG_OBJECT (pay, "quant_data size %u", quant_data_size);
- if (pay->buffer_list) {
- list = gst_buffer_list_new ();
- }
+ list = gst_buffer_list_new ();
bytes_left = sizeof (jpeg_header) + quant_data_size + size;
@@ -830,14 +816,8 @@
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
- if (pay->buffer_list) {
- /* and add to list */
- gst_buffer_list_insert (list, -1, outbuf);
- } else {
- ret = gst_rtp_base_payload_push (basepayload, outbuf);
- if (ret != GST_FLOW_OK)
- break;
- }
+ /* and add to list */
+ gst_buffer_list_insert (list, -1, outbuf);
bytes_left -= payload_size;
offset += payload_size;
@@ -845,10 +825,8 @@
}
while (!frame_done);
- if (pay->buffer_list) {
- /* push the whole buffer list at once */
- ret = gst_rtp_base_payload_push_list (basepayload, list);
- }
+ /* push the whole buffer list at once */
+ ret = gst_rtp_base_payload_push_list (basepayload, list);
gst_buffer_unmap (buffer, &map);
gst_buffer_unref (buffer);
@@ -903,10 +881,6 @@
rtpjpegpay->type = g_value_get_int (value);
GST_DEBUG_OBJECT (object, "type = %d", rtpjpegpay->type);
break;
- case PROP_BUFFER_LIST:
- rtpjpegpay->buffer_list = g_value_get_boolean (value);
- GST_DEBUG_OBJECT (object, "buffer_list = %d", rtpjpegpay->buffer_list);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -928,9 +902,6 @@
case PROP_JPEG_TYPE:
g_value_set_int (value, rtpjpegpay->type);
break;
- case PROP_BUFFER_LIST:
- g_value_set_boolean (value, rtpjpegpay->buffer_list);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/rtp/gstrtpjpegpay.h b/gst/rtp/gstrtpjpegpay.h
index d7717d7..2d31299 100644
--- a/gst/rtp/gstrtpjpegpay.h
+++ b/gst/rtp/gstrtpjpegpay.h
@@ -47,8 +47,6 @@
gint height;
gint width;
- gboolean buffer_list;
-
guint8 quant;
};
diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c
index 6b94c18..3e84831 100644
--- a/gst/rtp/gstrtpmp4vpay.c
+++ b/gst/rtp/gstrtpmp4vpay.c
@@ -55,15 +55,11 @@
)
);
-#define DEFAULT_SEND_CONFIG FALSE
-#define DEFAULT_BUFFER_LIST FALSE
#define DEFAULT_CONFIG_INTERVAL 0
enum
{
ARG_0,
- ARG_SEND_CONFIG,
- ARG_BUFFER_LIST,
ARG_CONFIG_INTERVAL
};
@@ -108,17 +104,6 @@
"Payload MPEG-4 video as RTP packets (RFC 3016)",
"Wim Taymans <wim.taymans@gmail.com>");
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SEND_CONFIG,
- g_param_spec_boolean ("send-config", "Send Config",
- "Send the config parameters in RTP packets as well(deprecated "
- "see config-interval)",
- DEFAULT_SEND_CONFIG, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BUFFER_LIST,
- g_param_spec_boolean ("buffer-list", "Buffer Array",
- "Use Buffer Arrays",
- DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CONFIG_INTERVAL,
g_param_spec_uint ("config-interval", "Config Send Interval",
"Send Config Insertion Interval in seconds (configuration headers "
@@ -143,8 +128,6 @@
rtpmp4vpay->adapter = gst_adapter_new ();
rtpmp4vpay->rate = 90000;
rtpmp4vpay->profile = 1;
- rtpmp4vpay->buffer_list = DEFAULT_BUFFER_LIST;
- rtpmp4vpay->send_config = DEFAULT_SEND_CONFIG;
rtpmp4vpay->need_config = TRUE;
rtpmp4vpay->config_interval = DEFAULT_CONFIG_INTERVAL;
rtpmp4vpay->last_config = -1;
@@ -268,12 +251,10 @@
ret = GST_FLOW_OK;
- if (rtpmp4vpay->buffer_list) {
- /* Use buffer lists. Each frame will be put into a list
- * of buffers and the whole list will be pushed downstream
- * at once */
- list = gst_buffer_list_new ();
- }
+ /* Use buffer lists. Each frame will be put into a list
+ * of buffers and the whole list will be pushed downstream
+ * at once */
+ list = gst_buffer_list_new ();
while (avail > 0) {
guint towrite;
@@ -307,21 +288,13 @@
GST_BUFFER_TIMESTAMP (outbuf) = rtpmp4vpay->first_timestamp;
- if (rtpmp4vpay->buffer_list) {
- /* add to list */
- gst_buffer_list_insert (list, -1, outbuf);
- } else {
- ret =
- gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmp4vpay), outbuf);
- }
+ /* add to list */
+ gst_buffer_list_insert (list, -1, outbuf);
}
- if (rtpmp4vpay->buffer_list) {
- /* push the whole buffer list at once */
- ret =
- gst_rtp_base_payload_push_list (GST_RTP_BASE_PAYLOAD (rtpmp4vpay),
- list);
- }
+ /* push the whole buffer list at once */
+ ret =
+ gst_rtp_base_payload_push_list (GST_RTP_BASE_PAYLOAD (rtpmp4vpay), list);
return ret;
}
@@ -609,16 +582,6 @@
rtpmp4vpay = GST_RTP_MP4V_PAY (object);
switch (prop_id) {
- case ARG_SEND_CONFIG:
- rtpmp4vpay->send_config = g_value_get_boolean (value);
- /* send the configuration once every minute */
- if (rtpmp4vpay->send_config && !(rtpmp4vpay->config_interval > 0)) {
- rtpmp4vpay->config_interval = 60;
- }
- break;
- case ARG_BUFFER_LIST:
- rtpmp4vpay->buffer_list = g_value_get_boolean (value);
- break;
case ARG_CONFIG_INTERVAL:
rtpmp4vpay->config_interval = g_value_get_uint (value);
break;
@@ -636,12 +599,6 @@
rtpmp4vpay = GST_RTP_MP4V_PAY (object);
switch (prop_id) {
- case ARG_SEND_CONFIG:
- g_value_set_boolean (value, rtpmp4vpay->send_config);
- break;
- case ARG_BUFFER_LIST:
- g_value_set_boolean (value, rtpmp4vpay->buffer_list);
- break;
case ARG_CONFIG_INTERVAL:
g_value_set_uint (value, rtpmp4vpay->config_interval);
break;
diff --git a/gst/rtp/gstrtpmp4vpay.h b/gst/rtp/gstrtpmp4vpay.h
index abdc903..6cb552a 100644
--- a/gst/rtp/gstrtpmp4vpay.h
+++ b/gst/rtp/gstrtpmp4vpay.h
@@ -54,8 +54,6 @@
gboolean send_config;
gboolean need_config;
- gboolean buffer_list;
-
/* naming might be confusing with send_config; but naming matches h264
* payloader */
guint config_interval;
diff --git a/gst/rtp/gstrtpmpadepay.c b/gst/rtp/gstrtpmpadepay.c
index 3bd40ae..25d7466 100644
--- a/gst/rtp/gstrtpmpadepay.c
+++ b/gst/rtp/gstrtpmpadepay.c
@@ -87,7 +87,6 @@
static void
gst_rtp_mpa_depay_init (GstRtpMPADepay * rtpmpadepay)
{
- /* needed because of GST_BOILERPLATE */
}
static gboolean
diff --git a/gst/rtp/gstrtpmparobustdepay.c b/gst/rtp/gstrtpmparobustdepay.c
index 47ec61b..193b22e 100644
--- a/gst/rtp/gstrtpmparobustdepay.c
+++ b/gst/rtp/gstrtpmparobustdepay.c
@@ -282,7 +282,7 @@
dummy->size =
mp3_type_frame_length_from_header (GST_ELEMENT_CAST (rtpmpadepay),
dummy->header, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
- dummy->data_size = dummy->size - dummy->side_info;
+ dummy->data_size = dummy->size - 4 - dummy->side_info;
dummy->backpointer = 0;
dummy->buffer = gst_buffer_new_and_alloc (dummy->side_info + 4);
@@ -444,9 +444,11 @@
}
}
/* rewrite buffer sync header */
- val = GST_READ_UINT16_BE (buf);
+ gst_buffer_map (buf, &map, GST_MAP_READWRITE);
+ val = GST_READ_UINT16_BE (map.data);
val = (0x7ff << 5) | val;
- GST_WRITE_UINT16_BE (buf, val);
+ GST_WRITE_UINT16_BE (map.data, val);
+ gst_buffer_unmap (buf, &map);
/* store and keep track of last indices */
rtpmpadepay->last_icc = icc;
rtpmpadepay->last_ii = iindex;
@@ -503,13 +505,13 @@
if (rtpmpadepay->offset == gst_buffer_get_size (frame->buffer)) {
if (g_list_next (rtpmpadepay->cur_adu_frame)) {
- GST_LOG_OBJECT (rtpmpadepay,
- "moving to next ADU frame, size %d, side_info %d",
- frame->size, frame->side_info);
rtpmpadepay->size += frame->data_size;
rtpmpadepay->cur_adu_frame = g_list_next (rtpmpadepay->cur_adu_frame);
frame = (GstADUFrame *) rtpmpadepay->cur_adu_frame->data;
rtpmpadepay->offset = 0;
+ GST_LOG_OBJECT (rtpmpadepay,
+ "moving to next ADU frame, size %d, side_info %d, backpointer %d",
+ frame->size, frame->side_info, frame->backpointer);
/* layer I and II packets have no bitreservoir and must be sent as-is;
* so flush any pending frame */
if (G_UNLIKELY (frame->layer != 3 && rtpmpadepay->mp3_frame))
@@ -529,6 +531,7 @@
gst_byte_writer_set_pos (rtpmpadepay->mp3_frame, 0);
/* bytewriter corresponds to head frame,
* i.e. the header and the side info must match */
+ g_assert (4 + head->side_info <= head->size);
gst_buffer_map (head->buffer, &map, GST_MAP_READ);
gst_byte_writer_put_data_unchecked (rtpmpadepay->mp3_frame,
map.data, 4 + head->side_info);
@@ -593,6 +596,8 @@
gst_buffer_map (buf, &map, GST_MAP_READ);
GST_LOG_OBJECT (rtpmpadepay, "adding to current MP3 frame");
gst_byte_writer_set_pos (rtpmpadepay->mp3_frame, tpos);
+ av -= (tpos - pos);
+ g_assert (map.size >= 4 + frame->side_info);
av = MIN (av, map.size - 4 - frame->side_info);
gst_byte_writer_put_data_unchecked (rtpmpadepay->mp3_frame,
map.data + 4 + frame->side_info, av);
@@ -792,6 +797,8 @@
g_queue_foreach (rtpmpadepay->adu_frames,
(GFunc) gst_rtp_mpa_robust_depay_free_frame, NULL);
g_queue_clear (rtpmpadepay->adu_frames);
+ if (rtpmpadepay->mp3_frame)
+ gst_byte_writer_free (rtpmpadepay->mp3_frame);
break;
}
default:
diff --git a/gst/rtp/gstrtptheoradepay.c b/gst/rtp/gstrtptheoradepay.c
index eff0746..5c6fe82 100644
--- a/gst/rtp/gstrtptheoradepay.c
+++ b/gst/rtp/gstrtptheoradepay.c
@@ -541,11 +541,9 @@
/* create buffer for packet */
if (G_UNLIKELY (to_free)) {
- outbuf = gst_buffer_new ();
- gst_buffer_append_memory (buf,
- gst_memory_new_wrapped (0, to_free,
- (payload - to_free) + length, payload - to_free, length, to_free,
- g_free));
+ outbuf =
+ gst_buffer_new_wrapped_full (0, to_free, (payload - to_free) + length,
+ payload - to_free, length, to_free, g_free);
to_free = NULL;
} else {
outbuf = gst_buffer_new_and_alloc (length);
diff --git a/gst/rtp/gstrtpvorbispay.c b/gst/rtp/gstrtpvorbispay.c
index b2d4ee4..dc1db9b 100644
--- a/gst/rtp/gstrtpvorbispay.c
+++ b/gst/rtp/gstrtpvorbispay.c
@@ -103,7 +103,6 @@
static void
gst_rtp_vorbis_pay_init (GstRtpVorbisPay * rtpvorbispay)
{
- /* needed because of GST_BOILERPLATE */
}
static void
diff --git a/gst/rtp/gstrtpvrawdepay.c b/gst/rtp/gstrtpvrawdepay.c
index 120e8ac..4adcffc 100644
--- a/gst/rtp/gstrtpvrawdepay.c
+++ b/gst/rtp/gstrtpvrawdepay.c
@@ -94,7 +94,6 @@
static void
gst_rtp_vraw_depay_init (GstRtpVRawDepay * rtpvrawdepay)
{
- /* needed because of GST_BOILERPLATE */
}
static void
@@ -149,7 +148,7 @@
config = gst_buffer_pool_get_config (pool);
gst_buffer_pool_config_set_params (config, caps, size, min, max);
- if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
/* just set the metadata, if the pool can support it we will transparently use
* it through the video info API. We could also see if the pool support this
* metadata and only activate it then. */
diff --git a/gst/rtpmanager/Makefile.in b/gst/rtpmanager/Makefile.in
index 3aa009b..19acb5a 100644
--- a/gst/rtpmanager/Makefile.in
+++ b/gst/rtpmanager/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -270,7 +270,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -970,16 +972,16 @@
# these are all the rules generating the relevant files
$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
- $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
- glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+ $(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
--fprod "\n/* enumerations from \"@filename@\" */\n" \
--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
@@ -988,7 +990,7 @@
$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
--fprod "\n/* enumerations from \"@filename@\" */" \
--vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 2d7a286..06622c9 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -904,7 +904,7 @@
/* start pushing out buffers */
GST_DEBUG_OBJECT (jitterbuffer, "Starting task on srcpad");
result = gst_pad_start_task (jitterbuffer->priv->srcpad,
- (GstTaskFunction) gst_rtp_jitter_buffer_loop, jitterbuffer);
+ (GstTaskFunction) gst_rtp_jitter_buffer_loop, jitterbuffer, NULL);
} else {
/* make sure all data processing stops ASAP */
gst_rtp_jitter_buffer_flush_start (jitterbuffer);
@@ -1255,12 +1255,11 @@
jitterbuffer = GST_RTP_JITTER_BUFFER (parent);
- if (G_UNLIKELY (!gst_rtp_buffer_validate (buffer)))
- goto invalid_buffer;
-
priv = jitterbuffer->priv;
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
+ if (G_UNLIKELY (!gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp)))
+ goto invalid_buffer;
+
pt = gst_rtp_buffer_get_payload_type (&rtp);
seqnum = gst_rtp_buffer_get_seq (&rtp);
gst_rtp_buffer_unmap (&rtp);
@@ -1529,7 +1528,7 @@
guint64 ext_time, elapsed;
guint32 rtp_time;
GstRtpJitterBufferPrivate *priv;
- GstRTPBuffer rtp = { NULL, };
+ GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
priv = jitterbuffer->priv;
gst_rtp_buffer_map (outbuf, GST_MAP_READ, &rtp);
@@ -1637,7 +1636,7 @@
GST_INFO_OBJECT (jitterbuffer, "scheduling timeout");
id = gst_clock_new_single_shot_id (clock, sync_time);
gst_clock_id_wait_async (id, (GstClockCallback) eos_reached,
- jitterbuffer);
+ jitterbuffer, NULL);
}
GST_OBJECT_UNLOCK (jitterbuffer);
}
diff --git a/gst/rtpmanager/gstrtpptdemux.c b/gst/rtpmanager/gstrtpptdemux.c
index 634834d..9a2ee1b 100644
--- a/gst/rtpmanager/gstrtpptdemux.c
+++ b/gst/rtpmanager/gstrtpptdemux.c
@@ -354,10 +354,9 @@
rtpdemux = GST_RTP_PT_DEMUX (parent);
- if (!gst_rtp_buffer_validate (buf))
+ if (!gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp))
goto invalid_buffer;
- gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
pt = gst_rtp_buffer_get_payload_type (&rtp);
gst_rtp_buffer_unmap (&rtp);
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index 72d9962..123fad7 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -192,7 +192,6 @@
LAST_SIGNAL
};
-#define DEFAULT_NTP_NS_BASE 0
#define DEFAULT_BANDWIDTH RTP_STATS_BANDWIDTH
#define DEFAULT_RTCP_FRACTION (RTP_STATS_BANDWIDTH * RTP_STATS_RTCP_FRACTION)
#define DEFAULT_RTCP_RR_BANDWIDTH -1
@@ -206,7 +205,6 @@
enum
{
PROP_0,
- PROP_NTP_NS_BASE,
PROP_BANDWIDTH,
PROP_RTCP_FRACTION,
PROP_RTCP_RR_BANDWIDTH,
@@ -242,8 +240,6 @@
/* caps mapping */
GHashTable *ptmap;
- /* NTP base time */
- guint64 ntpnsbase;
gboolean use_pipeline_clock;
};
@@ -518,12 +514,6 @@
on_sender_timeout), NULL, NULL, g_cclosure_marshal_VOID__UINT,
G_TYPE_NONE, 1, G_TYPE_UINT);
- g_object_class_install_property (gobject_class, PROP_NTP_NS_BASE,
- g_param_spec_uint64 ("ntp-ns-base", "NTP base time",
- "The NTP base time corresponding to running_time 0 (deprecated)", 0,
- G_MAXUINT64, DEFAULT_NTP_NS_BASE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (gobject_class, PROP_BANDWIDTH,
g_param_spec_double ("bandwidth", "Bandwidth",
"The bandwidth of the session in bytes per second (0 for auto-discover)",
@@ -682,13 +672,6 @@
priv = rtpsession->priv;
switch (prop_id) {
- case PROP_NTP_NS_BASE:
- GST_OBJECT_LOCK (rtpsession);
- priv->ntpnsbase = g_value_get_uint64 (value);
- GST_DEBUG_OBJECT (rtpsession, "setting NTP base to %" GST_TIME_FORMAT,
- GST_TIME_ARGS (priv->ntpnsbase));
- GST_OBJECT_UNLOCK (rtpsession);
- break;
case PROP_BANDWIDTH:
g_object_set_property (G_OBJECT (priv->session), "bandwidth", value);
break;
@@ -730,11 +713,6 @@
priv = rtpsession->priv;
switch (prop_id) {
- case PROP_NTP_NS_BASE:
- GST_OBJECT_LOCK (rtpsession);
- g_value_set_uint64 (value, priv->ntpnsbase);
- GST_OBJECT_UNLOCK (rtpsession);
- break;
case PROP_BANDWIDTH:
g_object_get_property (G_OBJECT (priv->session), "bandwidth", value);
break;
diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c
index 0ddd27b..f933e81 100644
--- a/gst/rtpmanager/gstrtpssrcdemux.c
+++ b/gst/rtpmanager/gstrtpssrcdemux.c
@@ -86,6 +86,12 @@
#define GST_PAD_LOCK(obj) (g_rec_mutex_lock (&(obj)->padlock))
#define GST_PAD_UNLOCK(obj) (g_rec_mutex_unlock (&(obj)->padlock))
+typedef enum
+{
+ RTP_PAD,
+ RTCP_PAD
+} PadType;
+
/* signals */
enum
{
@@ -207,9 +213,9 @@
}
-/* with PAD_LOCK */
-static GstRtpSsrcDemuxPad *
-find_or_create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc)
+static GstPad *
+find_or_create_demux_pad_for_ssrc (GstRtpSsrcDemux * demux, guint32 ssrc,
+ PadType padtype)
{
GstPad *rtp_pad, *rtcp_pad;
GstElementClass *klass;
@@ -218,12 +224,28 @@
GstRtpSsrcDemuxPad *demuxpad;
GstCaps *caps;
struct ForwardEventData fdata;
+ GstPad *retpad;
+ gulong rtp_block, rtcp_block;
GST_DEBUG_OBJECT (demux, "creating pad for SSRC %08x", ssrc);
+ GST_PAD_LOCK (demux);
+
demuxpad = find_demux_pad_for_ssrc (demux, ssrc);
if (demuxpad != NULL) {
- return demuxpad;
+ switch (padtype) {
+ case RTP_PAD:
+ retpad = gst_object_ref (demuxpad->rtp_pad);
+ break;
+ case RTCP_PAD:
+ retpad = gst_object_ref (demuxpad->rtcp_pad);
+ break;
+ default:
+ retpad = NULL;
+ g_assert_not_reached ();
+ }
+ GST_PAD_UNLOCK (demux);
+ return retpad;
}
klass = GST_ELEMENT_GET_CLASS (demux);
@@ -281,10 +303,38 @@
gst_element_add_pad (GST_ELEMENT_CAST (demux), rtp_pad);
gst_element_add_pad (GST_ELEMENT_CAST (demux), rtcp_pad);
+ switch (padtype) {
+ case RTP_PAD:
+ retpad = gst_object_ref (demuxpad->rtp_pad);
+ break;
+ case RTCP_PAD:
+ retpad = gst_object_ref (demuxpad->rtcp_pad);
+ break;
+ default:
+ retpad = NULL;
+ g_assert_not_reached ();
+ }
+
+ gst_object_ref (rtp_pad);
+ gst_object_ref (rtcp_pad);
+
+ rtp_block = gst_pad_add_probe (rtp_pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+ NULL, NULL, NULL);
+ rtcp_block = gst_pad_add_probe (rtcp_pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+ NULL, NULL, NULL);
+
+ GST_PAD_UNLOCK (demux);
+
g_signal_emit (G_OBJECT (demux),
gst_rtp_ssrc_demux_signals[SIGNAL_NEW_SSRC_PAD], 0, ssrc, rtp_pad);
- return demuxpad;
+ gst_pad_remove_probe (rtp_pad, rtp_block);
+ gst_pad_remove_probe (rtcp_pad, rtcp_block);
+
+ gst_object_unref (rtp_pad);
+ gst_object_unref (rtcp_pad);
+
+ return retpad;
}
static void
@@ -574,29 +624,22 @@
GstFlowReturn ret;
GstRtpSsrcDemux *demux;
guint32 ssrc;
- GstRtpSsrcDemuxPad *dpad;
GstRTPBuffer rtp = { NULL };
GstPad *srcpad;
demux = GST_RTP_SSRC_DEMUX (parent);
- if (!gst_rtp_buffer_validate (buf))
+ if (!gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp))
goto invalid_payload;
- gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp);
ssrc = gst_rtp_buffer_get_ssrc (&rtp);
gst_rtp_buffer_unmap (&rtp);
GST_DEBUG_OBJECT (demux, "received buffer of SSRC %08x", ssrc);
- GST_PAD_LOCK (demux);
- dpad = find_or_create_demux_pad_for_ssrc (demux, ssrc);
- if (dpad == NULL) {
- GST_PAD_UNLOCK (demux);
+ srcpad = find_or_create_demux_pad_for_ssrc (demux, ssrc, RTP_PAD);
+ if (srcpad == NULL)
goto create_failed;
- }
- srcpad = gst_object_ref (dpad->rtp_pad);
- GST_PAD_UNLOCK (demux);
/* push to srcpad */
ret = gst_pad_push (srcpad, buf);
@@ -630,7 +673,6 @@
GstFlowReturn ret;
GstRtpSsrcDemux *demux;
guint32 ssrc;
- GstRtpSsrcDemuxPad *dpad;
GstRTCPPacket packet;
GstRTCPBuffer rtcp = { NULL, };
GstPad *srcpad;
@@ -660,14 +702,9 @@
GST_DEBUG_OBJECT (demux, "received RTCP of SSRC %08x", ssrc);
- GST_PAD_LOCK (demux);
- dpad = find_or_create_demux_pad_for_ssrc (demux, ssrc);
- if (dpad == NULL) {
- GST_PAD_UNLOCK (demux);
+ srcpad = find_or_create_demux_pad_for_ssrc (demux, ssrc, RTCP_PAD);
+ if (srcpad == NULL)
goto create_failed;
- }
- srcpad = gst_object_ref (dpad->rtcp_pad);
- GST_PAD_UNLOCK (demux);
/* push to srcpad */
ret = gst_pad_push (srcpad, buf);
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index bb39c08..fa55c16 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -1711,26 +1711,23 @@
g_return_val_if_fail (RTP_IS_SESSION (sess), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
- if (!gst_rtp_buffer_validate (buffer))
+ if (!gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp))
goto invalid_packet;
RTP_SESSION_LOCK (sess);
- /* update arrival stats */
- update_arrival_stats (sess, &arrival, TRUE, buffer, current_time,
- running_time, -1);
-
/* ignore more RTP packets when we left the session */
if (sess->source->received_bye)
goto ignore;
+ /* update arrival stats */
+ update_arrival_stats (sess, &arrival, TRUE, buffer, current_time,
+ running_time, -1);
+
/* get SSRC and look up in session database */
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
ssrc = gst_rtp_buffer_get_ssrc (&rtp);
source = obtain_source (sess, ssrc, &created, &arrival, TRUE);
- if (!source) {
- gst_rtp_buffer_unmap (&rtp);
+ if (!source)
goto collision;
- }
/* copy available csrc for later */
count = gst_rtp_buffer_get_csrc_count (&rtp);
@@ -1811,14 +1808,15 @@
ignore:
{
RTP_SESSION_UNLOCK (sess);
+ gst_rtp_buffer_unmap (&rtp);
gst_buffer_unref (buffer);
- clean_arrival_stats (&arrival);
GST_DEBUG ("ignoring RTP packet because we are leaving");
return GST_FLOW_OK;
}
collision:
{
RTP_SESSION_UNLOCK (sess);
+ gst_rtp_buffer_unmap (&rtp);
gst_buffer_unref (buffer);
clean_arrival_stats (&arrival);
GST_DEBUG ("ignoring packet because its collisioning");
@@ -2454,26 +2452,11 @@
GstFlowReturn result;
RTPSource *source;
gboolean prevsender;
- gboolean valid_packet;
guint64 oldrate;
g_return_val_if_fail (RTP_IS_SESSION (sess), GST_FLOW_ERROR);
g_return_val_if_fail (is_list || GST_IS_BUFFER (data), GST_FLOW_ERROR);
- if (is_list) {
- GstBufferList *blist = GST_BUFFER_LIST_CAST (data);
- gint i, len = gst_buffer_list_length (blist);
-
- valid_packet = TRUE;
- for (i = 0; i < len; i++)
- valid_packet &= gst_rtp_buffer_validate (gst_buffer_list_get (blist, i));
- } else {
- valid_packet = gst_rtp_buffer_validate (GST_BUFFER_CAST (data));
- }
-
- if (!valid_packet)
- goto invalid_packet;
-
GST_LOG ("received RTP %s for sending", is_list ? "list" : "packet");
RTP_SESSION_LOCK (sess);
@@ -2495,14 +2478,6 @@
RTP_SESSION_UNLOCK (sess);
return result;
-
- /* ERRORS */
-invalid_packet:
- {
- gst_mini_object_unref (GST_MINI_OBJECT_CAST (data));
- GST_DEBUG ("invalid RTP packet received");
- return GST_FLOW_OK;
- }
}
static void
diff --git a/gst/rtsp/Makefile.in b/gst/rtsp/Makefile.in
index 7c01665..f58e592 100644
--- a/gst/rtsp/Makefile.in
+++ b/gst/rtsp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/rtsp/gstrtpdec.c b/gst/rtsp/gstrtpdec.c
index 1ec0b93..a639b8c 100644
--- a/gst/rtsp/gstrtpdec.c
+++ b/gst/rtsp/gstrtpdec.c
@@ -469,11 +469,9 @@
GST_DEBUG_OBJECT (rtpdec, "got rtp packet");
- if (!gst_rtp_buffer_validate (buffer))
+ if (!gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp))
goto bad_packet;
-
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
ssrc = gst_rtp_buffer_get_ssrc (&rtp);
pt = gst_rtp_buffer_get_payload_type (&rtp);
gst_rtp_buffer_unmap (&rtp);
@@ -521,7 +519,7 @@
session->recv_rtp_src = gst_pad_new_from_template (templ, name);
g_free (name);
- gst_pad_push_event (session->recv_rtp_src, gst_event_new_caps (caps));
+ gst_pad_set_caps (session->recv_rtp_src, caps);
gst_pad_set_element_private (session->recv_rtp_src, session);
gst_pad_set_query_function (session->recv_rtp_src, gst_rtp_dec_query_src);
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index d86cce8..4a0e4d1 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -248,15 +248,14 @@
static gboolean gst_rtspsrc_setup_auth (GstRTSPSrc * src,
GstRTSPMessage * response);
-static void gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd);
+static void gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd, gint mask);
static GstRTSPResult gst_rtspsrc_send_cb (GstRTSPExtension * ext,
GstRTSPMessage * request, GstRTSPMessage * response, GstRTSPSrc * src);
static GstRTSPResult gst_rtspsrc_open (GstRTSPSrc * src, gboolean async);
static GstRTSPResult gst_rtspsrc_play (GstRTSPSrc * src, GstSegment * segment,
gboolean async);
-static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle,
- gboolean async);
+static GstRTSPResult gst_rtspsrc_pause (GstRTSPSrc * src, gboolean async);
static GstRTSPResult gst_rtspsrc_close (GstRTSPSrc * src, gboolean async,
gboolean only_close);
@@ -266,18 +265,17 @@
static gboolean gst_rtspsrc_activate_streams (GstRTSPSrc * src);
static gboolean gst_rtspsrc_loop (GstRTSPSrc * src);
static gboolean gst_rtspsrc_stream_push_event (GstRTSPSrc * src,
- GstRTSPStream * stream, GstEvent * event, gboolean source);
-static gboolean gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event,
- gboolean source);
+ GstRTSPStream * stream, GstEvent * event);
+static gboolean gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event);
/* commands we send to out loop to notify it of events */
-#define CMD_OPEN 0
-#define CMD_PLAY 1
-#define CMD_PAUSE 2
-#define CMD_CLOSE 3
-#define CMD_WAIT 4
-#define CMD_RECONNECT 5
-#define CMD_LOOP 6
+#define CMD_OPEN (1 << 0)
+#define CMD_PLAY (1 << 1)
+#define CMD_PAUSE (1 << 2)
+#define CMD_CLOSE (1 << 3)
+#define CMD_WAIT (1 << 4)
+#define CMD_RECONNECT (1 << 5)
+#define CMD_LOOP (1 << 6)
#define GST_ELEMENT_PROGRESS(el, type, code, text) \
G_STMT_START { \
@@ -1519,7 +1517,7 @@
tmp_rtp >= src->client_port_range.max)
goto no_ports;
- udpsrc0 = gst_element_make_from_uri (GST_URI_SRC, host, NULL);
+ udpsrc0 = gst_element_make_from_uri (GST_URI_SRC, host, NULL, NULL);
if (udpsrc0 == NULL)
goto no_udp_protocol;
g_object_set (G_OBJECT (udpsrc0), "port", tmp_rtp, "reuse", FALSE, NULL);
@@ -1568,7 +1566,7 @@
}
/* allocate port+1 for RTCP now */
- udpsrc1 = gst_element_make_from_uri (GST_URI_SRC, host, NULL);
+ udpsrc1 = gst_element_make_from_uri (GST_URI_SRC, host, NULL, NULL);
if (udpsrc1 == NULL)
goto no_udp_rtcp_protocol;
@@ -1666,8 +1664,6 @@
gint cmd, i;
GstState state;
GList *walk;
- GstClock *clock;
- GstClockTime base_time = GST_CLOCK_TIME_NONE;
if (flush) {
event = gst_event_new_flush_start ();
@@ -1675,31 +1671,20 @@
cmd = CMD_WAIT;
state = GST_STATE_PAUSED;
} else {
- event = gst_event_new_flush_stop (TRUE);
+ event = gst_event_new_flush_stop (FALSE);
GST_DEBUG_OBJECT (src, "stop flush; playing %d", playing);
cmd = CMD_LOOP;
if (playing)
state = GST_STATE_PLAYING;
else
state = GST_STATE_PAUSED;
- clock = gst_element_get_clock (GST_ELEMENT_CAST (src));
- if (clock) {
- base_time = gst_clock_get_time (clock);
- gst_object_unref (clock);
- }
}
- gst_rtspsrc_push_event (src, event, FALSE);
- gst_rtspsrc_loop_send_cmd (src, cmd);
+ gst_rtspsrc_push_event (src, event);
+ gst_rtspsrc_loop_send_cmd (src, cmd, CMD_LOOP);
- /* set up manager before data-flow resumes */
/* to manage jitterbuffer buffer mode */
- if (src->manager) {
- gst_element_set_base_time (GST_ELEMENT_CAST (src->manager), base_time);
- /* and to have base_time trickle further down,
- * e.g. to jitterbuffer for its timeout handling */
- if (base_time != -1)
- gst_element_set_state (GST_ELEMENT_CAST (src->manager), state);
- }
+ if (src->manager)
+ gst_element_set_state (GST_ELEMENT_CAST (src->manager), state);
/* make running time start start at 0 again */
for (walk = src->streams; walk; walk = g_list_next (walk)) {
@@ -1708,15 +1693,10 @@
for (i = 0; i < 2; i++) {
/* for udp case */
if (stream->udpsrc[i]) {
- if (base_time != -1)
- gst_element_set_base_time (stream->udpsrc[i], base_time);
gst_element_set_state (stream->udpsrc[i], state);
}
}
}
- /* for tcp interleaved case */
- if (base_time != -1)
- gst_element_set_base_time (GST_ELEMENT_CAST (src), base_time);
}
static GstRTSPResult
@@ -1866,7 +1846,7 @@
if (playing) {
/* obtain current position in case seek fails */
gst_rtspsrc_get_position (src);
- gst_rtspsrc_pause (src, FALSE, FALSE);
+ gst_rtspsrc_pause (src, FALSE);
}
src->skip = skip;
@@ -2291,7 +2271,7 @@
goto was_eos;
stream->eos = TRUE;
- gst_rtspsrc_stream_push_event (src, stream, gst_event_new_eos (), TRUE);
+ gst_rtspsrc_stream_push_event (src, stream, gst_event_new_eos ());
return;
/* ERRORS */
@@ -2695,7 +2675,8 @@
/* creating UDP source for RTP */
if (min != -1) {
uri = g_strdup_printf ("udp://%s:%d", destination, min);
- stream->udpsrc[0] = gst_element_make_from_uri (GST_URI_SRC, uri, NULL);
+ stream->udpsrc[0] =
+ gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
g_free (uri);
if (stream->udpsrc[0] == NULL)
goto no_element;
@@ -2703,6 +2684,10 @@
/* take ownership */
gst_object_ref_sink (stream->udpsrc[0]);
+ if (src->udp_buffer_size != 0)
+ g_object_set (G_OBJECT (stream->udpsrc[0]), "buffer-size",
+ src->udp_buffer_size, NULL);
+
/* change state */
gst_element_set_state (stream->udpsrc[0], GST_STATE_PAUSED);
}
@@ -2710,7 +2695,8 @@
/* creating another UDP source for RTCP */
if (max != -1) {
uri = g_strdup_printf ("udp://%s:%d", destination, max);
- stream->udpsrc[1] = gst_element_make_from_uri (GST_URI_SRC, uri, NULL);
+ stream->udpsrc[1] =
+ gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
g_free (uri);
if (stream->udpsrc[1] == NULL)
goto no_element;
@@ -2837,7 +2823,8 @@
rtp_port);
uri = g_strdup_printf ("udp://%s:%d", destination, rtp_port);
- stream->udpsink[0] = gst_element_make_from_uri (GST_URI_SINK, uri, NULL);
+ stream->udpsink[0] =
+ gst_element_make_from_uri (GST_URI_SINK, uri, NULL, NULL);
g_free (uri);
if (stream->udpsink[0] == NULL)
goto no_sink_element;
@@ -2889,7 +2876,8 @@
rtcp_port);
uri = g_strdup_printf ("udp://%s:%d", destination, rtcp_port);
- stream->udpsink[1] = gst_element_make_from_uri (GST_URI_SINK, uri, NULL);
+ stream->udpsink[1] =
+ gst_element_make_from_uri (GST_URI_SINK, uri, NULL, NULL);
g_free (uri);
if (stream->udpsink[1] == NULL)
goto no_sink_element;
@@ -3103,15 +3091,15 @@
g_object_set (G_OBJECT (stream->udpsrc[0]), "timeout", (guint64) 0, NULL);
}
if (stream->srcpad) {
+ GST_DEBUG_OBJECT (src, "activating stream pad %p", stream);
+ gst_pad_set_active (stream->srcpad, TRUE);
+
/* if we don't have a session manager, set the caps now. If we have a
* session, we will get a notification of the pad and the caps. */
if (!src->manager) {
GST_DEBUG_OBJECT (src, "setting pad caps for stream %p", stream);
gst_pad_set_caps (stream->srcpad, stream->caps);
}
-
- GST_DEBUG_OBJECT (src, "activating stream pad %p", stream);
- gst_pad_set_active (stream->srcpad, TRUE);
/* add the pad */
if (!stream->added) {
GST_DEBUG_OBJECT (src, "adding stream pad %p", stream);
@@ -3215,7 +3203,7 @@
static gboolean
gst_rtspsrc_stream_push_event (GstRTSPSrc * src, GstRTSPStream * stream,
- GstEvent * event, gboolean source)
+ GstEvent * event)
{
gboolean res = TRUE;
@@ -3223,7 +3211,7 @@
if (stream->srcpad == NULL)
goto done;
- if (source && stream->udpsrc[0]) {
+ if (stream->udpsrc[0]) {
gst_event_ref (event);
res = gst_element_send_event (stream->udpsrc[0], event);
} else if (stream->channelpad[0]) {
@@ -3234,7 +3222,7 @@
res = gst_pad_send_event (stream->channelpad[0], event);
}
- if (source && stream->udpsrc[1]) {
+ if (stream->udpsrc[1]) {
gst_event_ref (event);
res &= gst_element_send_event (stream->udpsrc[1], event);
} else if (stream->channelpad[1]) {
@@ -3252,7 +3240,7 @@
}
static gboolean
-gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event, gboolean source)
+gst_rtspsrc_push_event (GstRTSPSrc * src, GstEvent * event)
{
GList *streams;
gboolean res = TRUE;
@@ -3261,7 +3249,7 @@
GstRTSPStream *ostream = (GstRTSPStream *) streams->data;
gst_event_ref (event);
- res &= gst_rtspsrc_stream_push_event (src, ostream, event, source);
+ res &= gst_rtspsrc_stream_push_event (src, ostream, event);
}
gst_event_unref (event);
@@ -3344,6 +3332,7 @@
gst_rtsp_conninfo_close (GstRTSPSrc * src, GstRTSPConnInfo * info,
gboolean free)
{
+ GST_RTSP_STATE_LOCK (src);
if (info->connected) {
GST_DEBUG_OBJECT (src, "closing connection...");
gst_rtsp_connection_close (info->connection);
@@ -3355,6 +3344,7 @@
gst_rtsp_connection_free (info->connection);
info->connection = NULL;
}
+ GST_RTSP_STATE_UNLOCK (src);
return GST_RTSP_OK;
}
@@ -3377,6 +3367,7 @@
GList *walk;
GST_DEBUG_OBJECT (src, "set flushing %d", flush);
+ GST_RTSP_STATE_LOCK (src);
if (src->conninfo.connection) {
GST_DEBUG_OBJECT (src, "connection flush");
gst_rtsp_connection_flush (src->conninfo.connection, flush);
@@ -3387,6 +3378,7 @@
if (stream->conninfo.connection)
gst_rtsp_connection_flush (stream->conninfo.connection, flush);
}
+ GST_RTSP_STATE_UNLOCK (src);
}
/* FIXME, handle server request, reply with OK, for now */
@@ -4067,7 +4059,7 @@
}
static void
-gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd)
+gst_rtspsrc_loop_send_cmd (GstRTSPSrc * src, gint cmd, gint mask)
{
gint old;
@@ -4077,19 +4069,21 @@
GST_DEBUG_OBJECT (src, "sending cmd %d", cmd);
GST_OBJECT_LOCK (src);
- old = src->loop_cmd;
+ old = src->pending_cmd;
if (old != CMD_WAIT) {
- src->loop_cmd = CMD_WAIT;
+ src->pending_cmd = CMD_WAIT;
GST_OBJECT_UNLOCK (src);
/* cancel previous request */
gst_rtspsrc_loop_cancel_cmd (src, old);
GST_OBJECT_LOCK (src);
}
- src->loop_cmd = cmd;
+ src->pending_cmd = cmd;
/* interrupt if allowed */
- if (src->waiting) {
- GST_DEBUG_OBJECT (src, "start connection flush");
+ if (src->busy_cmd & mask) {
+ GST_DEBUG_OBJECT (src, "connection flush busy %d", src->busy_cmd);
gst_rtspsrc_connection_flush (src, TRUE);
+ } else {
+ GST_DEBUG_OBJECT (src, "not interrupting busy cmd %d", src->busy_cmd);
}
if (src->task)
gst_task_start (src->task);
@@ -4133,8 +4127,11 @@
gst_element_post_message (GST_ELEMENT_CAST (src),
gst_message_new_segment_done (GST_OBJECT_CAST (src),
src->segment.format, src->segment.position));
+ gst_rtspsrc_push_event (src,
+ gst_event_new_segment_done (src->segment.format,
+ src->segment.position));
} else {
- gst_rtspsrc_push_event (src, gst_event_new_eos (), FALSE);
+ gst_rtspsrc_push_event (src, gst_event_new_eos ());
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
/* for fatal errors we post an error message, post the error before the
@@ -4142,7 +4139,7 @@
GST_ELEMENT_ERROR (src, STREAM, FAILED,
("Internal data flow error."),
("streaming task paused, reason %s (%d)", reason, ret));
- gst_rtspsrc_push_event (src, gst_event_new_eos (), FALSE);
+ gst_rtspsrc_push_event (src, gst_event_new_eos ());
}
return FALSE;
}
@@ -6252,7 +6249,7 @@
}
static GstRTSPResult
-gst_rtspsrc_pause (GstRTSPSrc * src, gboolean idle, gboolean async)
+gst_rtspsrc_pause (GstRTSPSrc * src, gboolean async)
{
GstRTSPResult res = GST_RTSP_OK;
GstRTSPMessage request = { 0 };
@@ -6399,7 +6396,7 @@
/* we only act on the first udp timeout message, others are irrelevant
* and can be ignored. */
if (!ignore_timeout)
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_RECONNECT);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_RECONNECT, CMD_LOOP);
/* eat and free */
gst_message_unref (message);
return;
@@ -6456,46 +6453,39 @@
gst_rtspsrc_thread (GstRTSPSrc * src)
{
gint cmd;
- GstRTSPResult ret;
- gboolean running = FALSE;
GST_OBJECT_LOCK (src);
- cmd = src->loop_cmd;
- src->loop_cmd = CMD_WAIT;
+ cmd = src->pending_cmd;
+ if (cmd == CMD_PLAY || cmd == CMD_LOOP)
+ src->pending_cmd = CMD_LOOP;
+ else
+ src->pending_cmd = CMD_WAIT;
GST_DEBUG_OBJECT (src, "got command %d", cmd);
/* we got the message command, so ensure communication is possible again */
gst_rtspsrc_connection_flush (src, FALSE);
- /* we allow these to be interrupted */
- if (cmd == CMD_LOOP || cmd == CMD_CLOSE || cmd == CMD_PAUSE)
- src->waiting = TRUE;
+ src->busy_cmd = cmd;
GST_OBJECT_UNLOCK (src);
switch (cmd) {
case CMD_OPEN:
- ret = gst_rtspsrc_open (src, TRUE);
+ gst_rtspsrc_open (src, TRUE);
break;
case CMD_PLAY:
- ret = gst_rtspsrc_play (src, &src->segment, TRUE);
- if (ret == GST_RTSP_OK)
- running = TRUE;
+ gst_rtspsrc_play (src, &src->segment, TRUE);
break;
case CMD_PAUSE:
- ret = gst_rtspsrc_pause (src, TRUE, TRUE);
- if (ret == GST_RTSP_OK)
- running = TRUE;
+ gst_rtspsrc_pause (src, TRUE);
break;
case CMD_CLOSE:
- ret = gst_rtspsrc_close (src, TRUE, FALSE);
+ gst_rtspsrc_close (src, TRUE, FALSE);
break;
case CMD_LOOP:
- running = gst_rtspsrc_loop (src);
+ gst_rtspsrc_loop (src);
break;
case CMD_RECONNECT:
- ret = gst_rtspsrc_reconnect (src, FALSE);
- if (ret == GST_RTSP_OK)
- running = TRUE;
+ gst_rtspsrc_reconnect (src, FALSE);
break;
default:
break;
@@ -6503,14 +6493,12 @@
GST_OBJECT_LOCK (src);
/* and go back to sleep */
- if (src->loop_cmd == CMD_WAIT) {
- if (running)
- src->loop_cmd = CMD_LOOP;
- else if (src->task)
+ if (src->pending_cmd == CMD_WAIT) {
+ if (src->task)
gst_task_pause (src->task);
}
/* reset waiting */
- src->waiting = FALSE;
+ src->busy_cmd = CMD_WAIT;
GST_OBJECT_UNLOCK (src);
}
@@ -6521,10 +6509,10 @@
GST_OBJECT_LOCK (src);
- src->loop_cmd = CMD_WAIT;
+ src->pending_cmd = CMD_WAIT;
if (src->task == NULL) {
- src->task = gst_task_new ((GstTaskFunction) gst_rtspsrc_thread, src);
+ src->task = gst_task_new ((GstTaskFunction) gst_rtspsrc_thread, src, NULL);
if (src->task == NULL)
goto task_error;
@@ -6550,7 +6538,7 @@
GST_DEBUG_OBJECT (src, "stopping");
/* also cancels pending task */
- gst_rtspsrc_loop_send_cmd (src, CMD_WAIT);
+ gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, CMD_CLOSE);
GST_OBJECT_LOCK (src);
if ((task = src->task)) {
@@ -6598,12 +6586,12 @@
/* first attempt, don't ignore timeouts */
rtspsrc->ignore_timeout = FALSE;
rtspsrc->open_error = FALSE;
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_OPEN);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_OPEN, 0);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
/* unblock the tcp tasks and make the loop waiting */
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_WAIT);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_WAIT, CMD_LOOP);
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
break;
@@ -6617,18 +6605,18 @@
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PLAY);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PLAY, 0);
break;
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
/* send pause request and keep the idle task around */
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PAUSE);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_PAUSE, CMD_LOOP);
ret = GST_STATE_CHANGE_NO_PREROLL;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
ret = GST_STATE_CHANGE_NO_PREROLL;
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
- gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE);
+ gst_rtspsrc_loop_send_cmd (rtspsrc, CMD_CLOSE, CMD_PAUSE);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
gst_rtspsrc_stop (rtspsrc);
@@ -6656,7 +6644,7 @@
rtspsrc = GST_RTSPSRC (element);
if (GST_EVENT_IS_DOWNSTREAM (event)) {
- res = gst_rtspsrc_push_event (rtspsrc, event, TRUE);
+ res = gst_rtspsrc_push_event (rtspsrc, event);
} else {
res = GST_ELEMENT_CLASS (parent_class)->send_event (element, event);
}
diff --git a/gst/rtsp/gstrtspsrc.h b/gst/rtsp/gstrtspsrc.h
index eb7f8e5..d75dc29 100644
--- a/gst/rtsp/gstrtspsrc.h
+++ b/gst/rtsp/gstrtspsrc.h
@@ -178,9 +178,9 @@
GstClockTime base_time;
/* UDP mode loop */
- gint loop_cmd;
+ gint pending_cmd;
+ gint busy_cmd;
gboolean ignore_timeout;
- gboolean waiting;
gboolean open_error;
/* mutex for protecting state changes */
diff --git a/gst/shapewipe/Makefile.in b/gst/shapewipe/Makefile.in
index 5d58f25..1f3438c 100644
--- a/gst/shapewipe/Makefile.in
+++ b/gst/shapewipe/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/smpte/Makefile.in b/gst/smpte/Makefile.in
index 319c407..2951de3 100644
--- a/gst/smpte/Makefile.in
+++ b/gst/smpte/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/smpte/gstsmpte.c b/gst/smpte/gstsmpte.c
index c2ed40a..5df1f91 100644
--- a/gst/smpte/gstsmpte.c
+++ b/gst/smpte/gstsmpte.c
@@ -84,7 +84,6 @@
#define DEFAULT_PROP_TYPE 1
#define DEFAULT_PROP_BORDER 0
#define DEFAULT_PROP_DEPTH 16
-#define DEFAULT_PROP_FPS 0.
#define DEFAULT_PROP_DURATION GST_SECOND
#define DEFAULT_PROP_INVERT FALSE
@@ -94,7 +93,6 @@
PROP_TYPE,
PROP_BORDER,
PROP_DEPTH,
- PROP_FPS,
PROP_DURATION,
PROP_INVERT,
PROP_LAST,
@@ -185,11 +183,6 @@
g_param_spec_enum ("type", "Type", "The type of transition to use",
GST_TYPE_SMPTE_TRANSITION_TYPE, DEFAULT_PROP_TYPE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FPS,
- g_param_spec_float ("fps", "FPS",
- "Frames per second if no input files are given (deprecated)", 0.,
- G_MAXFLOAT, DEFAULT_PROP_FPS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BORDER,
g_param_spec_int ("border", "Border",
"The border width of the transition", 0, G_MAXINT,
@@ -288,9 +281,6 @@
smpte->fps_num = GST_VIDEO_INFO_FPS_N (&vinfo);
smpte->fps_denom = GST_VIDEO_INFO_FPS_D (&vinfo);
- /* for backward compat, we store these here */
- smpte->fps = ((gdouble) smpte->fps_num) / smpte->fps_denom;
-
/* figure out the duration in frames */
smpte->end_position = gst_util_uint64_scale (smpte->duration,
smpte->fps_num, GST_SECOND * smpte->fps_denom);
@@ -370,7 +360,6 @@
gst_collect_pads_add_pad (smpte->collect, smpte->sinkpad2,
sizeof (GstCollectData));
- smpte->fps = DEFAULT_PROP_FPS;
smpte->type = DEFAULT_PROP_TYPE;
smpte->border = DEFAULT_PROP_BORDER;
smpte->depth = DEFAULT_PROP_DEPTH;
@@ -598,9 +587,6 @@
case PROP_BORDER:
smpte->border = g_value_get_int (value);
break;
- case PROP_FPS:
- smpte->fps = g_value_get_float (value);
- break;
case PROP_DEPTH:
smpte->depth = g_value_get_int (value);
break;
@@ -628,9 +614,6 @@
case PROP_TYPE:
g_value_set_enum (value, smpte->type);
break;
- case PROP_FPS:
- g_value_set_float (value, smpte->fps);
- break;
case PROP_BORDER:
g_value_set_int (value, smpte->border);
break;
diff --git a/gst/spectrum/Makefile.in b/gst/spectrum/Makefile.in
index c52e403..744ea59 100644
--- a/gst/spectrum/Makefile.in
+++ b/gst/spectrum/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/udp/Makefile.in b/gst/udp/Makefile.in
index 0c35a0e..282d164 100644
--- a/gst/udp/Makefile.in
+++ b/gst/udp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -263,7 +263,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -918,16 +920,16 @@
# these are all the rules generating the relevant files
$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
- $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
- glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+ $(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
--fprod "\n/* enumerations from \"@filename@\" */\n" \
--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
@@ -936,7 +938,7 @@
$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
--fprod "\n/* enumerations from \"@filename@\" */" \
--vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \
diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c
index c80bdda..8db4db9 100644
--- a/gst/udp/gstmultiudpsink.c
+++ b/gst/udp/gstmultiudpsink.c
@@ -468,11 +468,6 @@
mem = gst_buffer_get_memory (buffer, i);
gst_memory_map (mem, &map[i], GST_MAP_READ);
- if (map[i].size > UDP_MAX_SIZE) {
- GST_WARNING ("Attempting to send a UDP packet larger than maximum "
- "size (%" G_GSIZE_FORMAT " > %d)", map[i].size, UDP_MAX_SIZE);
- }
-
vec[i].buffer = map[i].data;
vec[i].size = map[i].size;
@@ -486,6 +481,11 @@
g_mutex_lock (&sink->client_lock);
GST_LOG_OBJECT (bsink, "about to send %" G_GSIZE_FORMAT " bytes", size);
+ if (size > UDP_MAX_SIZE) {
+ GST_WARNING_OBJECT (bsink, "Attempting to send a UDP packet larger than "
+ "maximum size (%" G_GSIZE_FORMAT " > %d)", size, UDP_MAX_SIZE);
+ }
+
no_clients = 0;
num = 0;
for (clients = sink->clients; clients; clients = g_list_next (clients)) {
@@ -537,10 +537,16 @@
}
send_error:
{
+ GstFlowReturn res = GST_FLOW_ERROR;
+
g_mutex_unlock (&sink->client_lock);
GST_DEBUG ("got send error %s", err->message);
+
+ if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ res = GST_FLOW_FLUSHING;
+
g_clear_error (&err);
- return GST_FLOW_ERROR;
+ return res;
}
}
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index 1f42b8f..0440f47 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -954,7 +954,7 @@
if (!g_socket_leave_multicast_group (src->used_socket,
g_inet_socket_address_get_address (src->addr), FALSE,
- src->multi_iface, NULL)) {
+ src->multi_iface, &err)) {
GST_ERROR_OBJECT (src, "Failed to leave multicast group: %s",
err->message);
g_clear_error (&err);
diff --git a/gst/videobox/Makefile.in b/gst/videobox/Makefile.in
index 1292b11..c5c096d 100644
--- a/gst/videobox/Makefile.in
+++ b/gst/videobox/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -274,7 +274,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/videobox/gstvideobox.c b/gst/videobox/gstvideobox.c
index 506e91e..94a8d13 100644
--- a/gst/videobox/gstvideobox.c
+++ b/gst/videobox/gstvideobox.c
@@ -161,10 +161,10 @@
stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
if (G_LIKELY (stride == 4 * width))
- orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
+ video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
else if (height) {
for (; height; --height) {
- orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
+ video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
dest += stride;
}
}
@@ -1786,10 +1786,10 @@
(rgb_colors_B[fill_type] << (p[3] * 8)));
if (stride == width * 4) {
- orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
+ video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width * height);
} else if (height) {
for (; height; --height) {
- orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
+ video_box_orc_splat_u32 ((guint32 *) dest, empty_pixel, width);
dest += stride;
}
}
diff --git a/gst/videobox/gstvideoboxorc-dist.c b/gst/videobox/gstvideoboxorc-dist.c
index 1e00246..11c8d8f 100644
--- a/gst/videobox/gstvideoboxorc-dist.c
+++ b/gst/videobox/gstvideoboxorc-dist.c
@@ -82,7 +82,7 @@
#ifndef DISABLE_ORC
#include <orc/orc.h>
#endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
/* begin Orc C target preamble */
@@ -129,10 +129,10 @@
-/* orc_splat_u32 */
+/* video_box_orc_splat_u32 */
#ifdef DISABLE_ORC
void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
{
int i;
orc_union32 *ORC_RESTRICT ptr0;
@@ -155,7 +155,7 @@
#else
static void
-_backup_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_box_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int n = ex->n;
@@ -178,20 +178,21 @@
}
void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
- orc_program_set_name (p, "orc_splat_u32");
- orc_program_set_backup_function (p, _backup_orc_splat_u32);
+ orc_program_set_name (p, "video_box_orc_splat_u32");
+ orc_program_set_backup_function (p, _backup_video_box_orc_splat_u32);
orc_program_add_destination (p, 4, "d1");
orc_program_add_parameter (p, 4, "p1");
@@ -199,17 +200,20 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
diff --git a/gst/videobox/gstvideoboxorc-dist.h b/gst/videobox/gstvideoboxorc-dist.h
index 1a711a5..397d3a4 100644
--- a/gst/videobox/gstvideoboxorc-dist.h
+++ b/gst/videobox/gstvideoboxorc-dist.h
@@ -67,7 +67,7 @@
#define ORC_RESTRICT
#endif
#endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_box_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
#ifdef __cplusplus
}
diff --git a/gst/videobox/gstvideoboxorc.orc b/gst/videobox/gstvideoboxorc.orc
index 30abfb1..1dbf9e7 100644
--- a/gst/videobox/gstvideoboxorc.orc
+++ b/gst/videobox/gstvideoboxorc.orc
@@ -1,5 +1,5 @@
-.function orc_splat_u32
+.function video_box_orc_splat_u32
.dest 4 d1 guint32
.param 4 p1
diff --git a/gst/videocrop/Makefile.in b/gst/videocrop/Makefile.in
index 24147e2..afcfc09 100644
--- a/gst/videocrop/Makefile.in
+++ b/gst/videocrop/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/videocrop/gstvideocrop.c b/gst/videocrop/gstvideocrop.c
index 77e6d08..baca7e8 100644
--- a/gst/videocrop/gstvideocrop.c
+++ b/gst/videocrop/gstvideocrop.c
@@ -609,12 +609,7 @@
gst_caps_append_structure (other_caps, new_structure);
}
- if (gst_caps_is_empty (other_caps)) {
- gst_caps_unref (other_caps);
- other_caps = NULL;
- }
-
- if (other_caps && filter_caps) {
+ if (!gst_caps_is_empty (other_caps) && filter_caps) {
GstCaps *tmp = gst_caps_intersect_full (filter_caps, other_caps,
GST_CAPS_INTERSECT_FIRST);
gst_caps_replace (&other_caps, tmp);
diff --git a/gst/videofilter/Makefile.in b/gst/videofilter/Makefile.in
index 7e82dd8..c8e6efa 100644
--- a/gst/videofilter/Makefile.in
+++ b/gst/videofilter/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/videomixer/Makefile.in b/gst/videomixer/Makefile.in
index fb2a03e..c8cc66d 100644
--- a/gst/videomixer/Makefile.in
+++ b/gst/videomixer/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -275,7 +275,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/videomixer/blend.c b/gst/videomixer/blend.c
index a54aab8..b7e24a1 100644
--- a/gst/videomixer/blend.c
+++ b/gst/videomixer/blend.c
@@ -97,7 +97,7 @@
gint src_width, gint src_stride, gint dest_stride, guint s_alpha) \
{ \
s_alpha = MIN (255, s_alpha); \
- orc_##method##_##name (dest, dest_stride, src, src_stride, \
+ video_mixer_orc_##method##_##name (dest, dest_stride, src, src_stride, \
s_alpha, src_width, src_height); \
}
@@ -188,7 +188,7 @@
} \
val = GUINT32_FROM_BE ((0xff << A) | (c1 << C1) | (c2 << C2) | (c3 << C3)); \
\
- orc_splat_u32 ((guint32 *) dest, val, height * width); \
+ video_mixer_orc_splat_u32 ((guint32 *) dest, val, height * width); \
}
A32_COLOR (argb, TRUE, 24, 16, 8, 0);
@@ -425,20 +425,20 @@
#define GST_ROUND_UP_1(x) (x)
PLANAR_YUV_BLEND (i420, GST_VIDEO_FORMAT_I420, GST_ROUND_UP_2,
- GST_ROUND_UP_2, memcpy, orc_blend_u8);
+ GST_ROUND_UP_2, memcpy, video_mixer_orc_blend_u8);
PLANAR_YUV_FILL_CHECKER (i420, GST_VIDEO_FORMAT_I420, memset);
PLANAR_YUV_FILL_COLOR (i420, GST_VIDEO_FORMAT_I420, memset);
PLANAR_YUV_FILL_COLOR (yv12, GST_VIDEO_FORMAT_YV12, memset);
PLANAR_YUV_BLEND (y444, GST_VIDEO_FORMAT_Y444, GST_ROUND_UP_1,
- GST_ROUND_UP_1, memcpy, orc_blend_u8);
+ GST_ROUND_UP_1, memcpy, video_mixer_orc_blend_u8);
PLANAR_YUV_FILL_CHECKER (y444, GST_VIDEO_FORMAT_Y444, memset);
PLANAR_YUV_FILL_COLOR (y444, GST_VIDEO_FORMAT_Y444, memset);
PLANAR_YUV_BLEND (y42b, GST_VIDEO_FORMAT_Y42B, GST_ROUND_UP_2,
- GST_ROUND_UP_1, memcpy, orc_blend_u8);
+ GST_ROUND_UP_1, memcpy, video_mixer_orc_blend_u8);
PLANAR_YUV_FILL_CHECKER (y42b, GST_VIDEO_FORMAT_Y42B, memset);
PLANAR_YUV_FILL_COLOR (y42b, GST_VIDEO_FORMAT_Y42B, memset);
PLANAR_YUV_BLEND (y41b, GST_VIDEO_FORMAT_Y41B, GST_ROUND_UP_4,
- GST_ROUND_UP_1, memcpy, orc_blend_u8);
+ GST_ROUND_UP_1, memcpy, video_mixer_orc_blend_u8);
PLANAR_YUV_FILL_CHECKER (y41b, GST_VIDEO_FORMAT_Y41B, memset);
PLANAR_YUV_FILL_COLOR (y41b, GST_VIDEO_FORMAT_Y41B, memset);
@@ -581,12 +581,12 @@
guint32 val; \
\
val = GUINT32_FROM_BE ((red << r) | (green << g) | (blue << b)); \
- orc_splat_u32 ((guint32 *) dest, val, width); \
+ video_mixer_orc_splat_u32 ((guint32 *) dest, val, width); \
}
-#define _orc_memcpy_u32(dest,src,len) orc_memcpy_u32((guint32 *) dest, (const guint32 *) src, len/4)
+#define _orc_memcpy_u32(dest,src,len) video_mixer_orc_memcpy_u32((guint32 *) dest, (const guint32 *) src, len/4)
-RGB_BLEND (rgb, 3, memcpy, orc_blend_u8);
+RGB_BLEND (rgb, 3, memcpy, video_mixer_orc_blend_u8);
RGB_FILL_CHECKER_C (rgb, 3, 0, 1, 2);
MEMSET_RGB_C (rgb, 0, 1, 2);
RGB_FILL_COLOR (rgb_c, 3, _memset_rgb_c);
@@ -594,7 +594,7 @@
MEMSET_RGB_C (bgr, 2, 1, 0);
RGB_FILL_COLOR (bgr_c, 3, _memset_bgr_c);
-RGB_BLEND (xrgb, 4, _orc_memcpy_u32, orc_blend_u8);
+RGB_BLEND (xrgb, 4, _orc_memcpy_u32, video_mixer_orc_blend_u8);
RGB_FILL_CHECKER_C (xrgb, 4, 1, 2, 3);
MEMSET_XRGB (xrgb, 24, 16, 0);
RGB_FILL_COLOR (xrgb, 4, _memset_xrgb);
@@ -729,12 +729,12 @@
val = GUINT32_FROM_BE ((colY << Y1) | (colY << Y2) | (colU << U) | (colV << V)); \
\
for (i = 0; i < height; i++) { \
- orc_splat_u32 ((guint32 *) dest, val, width); \
+ video_mixer_orc_splat_u32 ((guint32 *) dest, val, width); \
dest += dest_stride; \
} \
}
-PACKED_422_BLEND (yuy2, memcpy, orc_blend_u8);
+PACKED_422_BLEND (yuy2, memcpy, video_mixer_orc_blend_u8);
PACKED_422_FILL_CHECKER_C (yuy2, 0, 1, 2, 3);
PACKED_422_FILL_CHECKER_C (uyvy, 1, 0, 3, 2);
PACKED_422_FILL_COLOR (yuy2, 24, 16, 8, 0);
diff --git a/gst/videomixer/blendorc-dist.c b/gst/videomixer/blendorc-dist.c
index ee783d8..5aa006d 100644
--- a/gst/videomixer/blendorc-dist.c
+++ b/gst/videomixer/blendorc-dist.c
@@ -82,18 +82,18 @@
#ifndef DISABLE_ORC
#include <orc/orc.h>
#endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
-void orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
- int n);
-void orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
+ const guint32 * ORC_RESTRICT s1, int n);
+void video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+void video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
@@ -141,10 +141,10 @@
-/* orc_splat_u32 */
+/* video_mixer_orc_splat_u32 */
#ifdef DISABLE_ORC
void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
{
int i;
orc_union32 *ORC_RESTRICT ptr0;
@@ -167,7 +167,7 @@
#else
static void
-_backup_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int n = ex->n;
@@ -190,20 +190,21 @@
}
void
-orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
+video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
- orc_program_set_name (p, "orc_splat_u32");
- orc_program_set_backup_function (p, _backup_orc_splat_u32);
+ orc_program_set_name (p, "video_mixer_orc_splat_u32");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_splat_u32);
orc_program_add_destination (p, 4, "d1");
orc_program_add_parameter (p, 4, "p1");
@@ -211,27 +212,30 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
-/* orc_memcpy_u32 */
+/* video_mixer_orc_memcpy_u32 */
#ifdef DISABLE_ORC
void
-orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
- int n)
+video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
+ const guint32 * ORC_RESTRICT s1, int n)
{
int i;
orc_union32 *ORC_RESTRICT ptr0;
@@ -256,7 +260,7 @@
#else
static void
-_backup_orc_memcpy_u32 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_memcpy_u32 (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int n = ex->n;
@@ -281,21 +285,22 @@
}
void
-orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
- int n)
+video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
+ const guint32 * ORC_RESTRICT s1, int n)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
- orc_program_set_name (p, "orc_memcpy_u32");
- orc_program_set_backup_function (p, _backup_orc_memcpy_u32);
+ orc_program_set_name (p, "video_mixer_orc_memcpy_u32");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_memcpy_u32);
orc_program_add_destination (p, 4, "d1");
orc_program_add_source (p, 4, "s1");
@@ -303,26 +308,29 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
ex->arrays[ORC_VAR_S1] = (void *) s1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
-/* orc_blend_u8 */
+/* video_mixer_orc_blend_u8 */
#ifdef DISABLE_ORC
void
-orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
@@ -378,7 +386,7 @@
#else
static void
-_backup_orc_blend_u8 (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_blend_u8 (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int j;
@@ -434,22 +442,23 @@
}
void
-orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_2d (p);
- orc_program_set_name (p, "orc_blend_u8");
- orc_program_set_backup_function (p, _backup_orc_blend_u8);
+ orc_program_set_name (p, "video_mixer_orc_blend_u8");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_blend_u8);
orc_program_add_destination (p, 1, "d1");
orc_program_add_source (p, 1, "s1");
orc_program_add_constant (p, 1, 0x00000008, "c1");
@@ -475,11 +484,14 @@
ORC_VAR_D1, ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ORC_EXECUTOR_M (ex) = m;
@@ -489,16 +501,16 @@
ex->params[ORC_VAR_S1] = s1_stride;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
-/* orc_blend_argb */
+/* video_mixer_orc_blend_argb */
#ifdef DISABLE_ORC
void
-orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
@@ -618,7 +630,7 @@
#else
static void
-_backup_orc_blend_argb (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_blend_argb (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int j;
@@ -738,22 +750,23 @@
}
void
-orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_2d (p);
- orc_program_set_name (p, "orc_blend_argb");
- orc_program_set_backup_function (p, _backup_orc_blend_argb);
+ orc_program_set_name (p, "video_mixer_orc_blend_argb");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_blend_argb);
orc_program_add_destination (p, 4, "d1");
orc_program_add_source (p, 4, "s1");
orc_program_add_constant (p, 4, 0x000000ff, "c1");
@@ -803,11 +816,14 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ORC_EXECUTOR_M (ex) = m;
@@ -817,16 +833,16 @@
ex->params[ORC_VAR_S1] = s1_stride;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
-/* orc_blend_bgra */
+/* video_mixer_orc_blend_bgra */
#ifdef DISABLE_ORC
void
-orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
@@ -949,7 +965,7 @@
#else
static void
-_backup_orc_blend_bgra (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_blend_bgra (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int j;
@@ -1072,22 +1088,23 @@
}
void
-orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_2d (p);
- orc_program_set_name (p, "orc_blend_bgra");
- orc_program_set_backup_function (p, _backup_orc_blend_bgra);
+ orc_program_set_name (p, "video_mixer_orc_blend_bgra");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_blend_bgra);
orc_program_add_destination (p, 4, "d1");
orc_program_add_source (p, 4, "s1");
orc_program_add_constant (p, 4, 0xff000000, "c1");
@@ -1141,11 +1158,14 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ORC_EXECUTOR_M (ex) = m;
@@ -1155,16 +1175,16 @@
ex->params[ORC_VAR_S1] = s1_stride;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
-/* orc_overlay_argb */
+/* video_mixer_orc_overlay_argb */
#ifdef DISABLE_ORC
void
-orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
@@ -1361,7 +1381,7 @@
#else
static void
-_backup_orc_overlay_argb (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_overlay_argb (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int j;
@@ -1558,22 +1578,23 @@
}
void
-orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_2d (p);
- orc_program_set_name (p, "orc_overlay_argb");
- orc_program_set_backup_function (p, _backup_orc_overlay_argb);
+ orc_program_set_name (p, "video_mixer_orc_overlay_argb");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_overlay_argb);
orc_program_add_destination (p, 4, "d1");
orc_program_add_source (p, 4, "s1");
orc_program_add_constant (p, 4, 0xffffffff, "c1");
@@ -1653,11 +1674,14 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ORC_EXECUTOR_M (ex) = m;
@@ -1667,16 +1691,16 @@
ex->params[ORC_VAR_S1] = s1_stride;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
-/* orc_overlay_bgra */
+/* video_mixer_orc_overlay_bgra */
#ifdef DISABLE_ORC
void
-orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
int i;
@@ -1879,7 +1903,7 @@
#else
static void
-_backup_orc_overlay_bgra (OrcExecutor * ORC_RESTRICT ex)
+_backup_video_mixer_orc_overlay_bgra (OrcExecutor * ORC_RESTRICT ex)
{
int i;
int j;
@@ -2082,22 +2106,23 @@
}
void
-orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
+video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
- static OrcProgram *p = 0;
+ static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
+ OrcProgram *p;
p = orc_program_new ();
orc_program_set_2d (p);
- orc_program_set_name (p, "orc_overlay_bgra");
- orc_program_set_backup_function (p, _backup_orc_overlay_bgra);
+ orc_program_set_name (p, "video_mixer_orc_overlay_bgra");
+ orc_program_set_backup_function (p, _backup_video_mixer_orc_overlay_bgra);
orc_program_add_destination (p, 4, "d1");
orc_program_add_source (p, 4, "s1");
orc_program_add_constant (p, 4, 0xffffffff, "c1");
@@ -2183,11 +2208,14 @@
ORC_VAR_D1);
orc_program_compile (p);
+ c = orc_program_take_code (p);
+ orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
- ex->program = p;
+ ex->arrays[ORC_VAR_A2] = c;
+ ex->program = 0;
ex->n = n;
ORC_EXECUTOR_M (ex) = m;
@@ -2197,7 +2225,7 @@
ex->params[ORC_VAR_S1] = s1_stride;
ex->params[ORC_VAR_P1] = p1;
- func = p->code_exec;
+ func = c->exec;
func (ex);
}
#endif
diff --git a/gst/videomixer/blendorc-dist.h b/gst/videomixer/blendorc-dist.h
index 9346540..aeeb678 100644
--- a/gst/videomixer/blendorc-dist.h
+++ b/gst/videomixer/blendorc-dist.h
@@ -67,13 +67,13 @@
#define ORC_RESTRICT
#endif
#endif
-void orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
-void orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
-void orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
-void orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
+void video_mixer_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_mixer_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
#ifdef __cplusplus
}
diff --git a/gst/videomixer/blendorc.orc b/gst/videomixer/blendorc.orc
index 9140345..cbc1a46 100644
--- a/gst/videomixer/blendorc.orc
+++ b/gst/videomixer/blendorc.orc
@@ -1,16 +1,16 @@
-.function orc_splat_u32
+.function video_mixer_orc_splat_u32
.dest 4 d1 guint32
.param 4 p1 guint32
copyl d1, p1
-.function orc_memcpy_u32
+.function video_mixer_orc_memcpy_u32
.dest 4 d1 guint32
.source 4 s1 guint32
copyl d1, s1
-.function orc_blend_u8
+.function video_mixer_orc_blend_u8
.flags 2d
.dest 1 d1 guint8
.source 1 s1 guint8
@@ -29,7 +29,7 @@
convsuswb d1, t2
-.function orc_blend_argb
+.function video_mixer_orc_blend_argb
.flags 2d
.dest 4 d guint8
.source 4 s guint8
@@ -61,7 +61,7 @@
orl t, t, a_alpha
storel d, t
-.function orc_blend_bgra
+.function video_mixer_orc_blend_bgra
.flags 2d
.dest 4 d guint8
.source 4 s guint8
@@ -96,7 +96,7 @@
storel d, t
-.function orc_overlay_argb
+.function video_mixer_orc_overlay_argb
.flags 2d
.dest 4 d guint8
.source 4 s guint8
@@ -156,7 +156,7 @@
orl t, t, a
storel d, t
-.function orc_overlay_bgra
+.function video_mixer_orc_overlay_bgra
.flags 2d
.dest 4 d guint8
.source 4 s guint8
diff --git a/gst/videomixer/videomixer2.c b/gst/videomixer/videomixer2.c
index 0d2d97e..fba78e7 100644
--- a/gst/videomixer/videomixer2.c
+++ b/gst/videomixer/videomixer2.c
@@ -1805,7 +1805,7 @@
/* add the pad to the element */
gst_element_add_pad (element, GST_PAD (mixpad));
- gst_child_proxy_child_added (G_OBJECT (mix), G_OBJECT (mixpad),
+ gst_child_proxy_child_added (GST_CHILD_PROXY (mix), G_OBJECT (mixpad),
GST_OBJECT_NAME (mixpad));
return GST_PAD (mixpad);
@@ -1829,7 +1829,7 @@
mixpad = GST_VIDEO_MIXER2_PAD (pad);
mix->sinkpads = g_slist_remove (mix->sinkpads, pad);
- gst_child_proxy_child_removed (G_OBJECT (mix), G_OBJECT (mixpad),
+ gst_child_proxy_child_removed (GST_CHILD_PROXY (mix), G_OBJECT (mixpad),
GST_OBJECT_NAME (mixpad));
mix->numpads--;
diff --git a/gst/wavenc/Makefile.in b/gst/wavenc/Makefile.in
index 582f701..bc2ae03 100644
--- a/gst/wavenc/Makefile.in
+++ b/gst/wavenc/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -247,7 +247,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/wavparse/Makefile.in b/gst/wavparse/Makefile.in
index bc21285..e52fb64 100644
--- a/gst/wavparse/Makefile.in
+++ b/gst/wavparse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -248,7 +248,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 098222b..8cea829 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -113,6 +113,34 @@
G_DEFINE_TYPE_WITH_CODE (GstWavParse, gst_wavparse, GST_TYPE_ELEMENT,
DEBUG_INIT);
+typedef struct
+{
+ /* Offset Size Description Value
+ * 0x00 4 ID unique identification value
+ * 0x04 4 Position play order position
+ * 0x08 4 Data Chunk ID RIFF ID of corresponding data chunk
+ * 0x0c 4 Chunk Start Byte Offset of Data Chunk *
+ * 0x10 4 Block Start Byte Offset to sample of First Channel
+ * 0x14 4 Sample Offset Byte Offset to sample byte of First Channel
+ */
+ guint32 id;
+ guint32 position;
+ guint32 data_chunk_id;
+ guint32 chunk_start;
+ guint32 block_start;
+ guint32 sample_offset;
+} GstWavParseCue;
+
+typedef struct
+{
+ /* Offset Size Description Value
+ * 0x08 4 Cue Point ID 0 - 0xFFFFFFFF
+ * 0x0c Text
+ */
+ guint32 cue_point_id;
+ gchar *text;
+} GstWavParseLabl;
+
static void
gst_wavparse_class_init (GstWavParseClass * klass)
{
@@ -196,8 +224,17 @@
wav->adapter = NULL;
}
if (wav->tags)
- gst_tag_list_free (wav->tags);
+ gst_tag_list_unref (wav->tags);
wav->tags = NULL;
+ if (wav->toc)
+ gst_toc_unref (wav->toc);
+ wav->toc = NULL;
+ if (wav->cues)
+ g_list_free_full (wav->cues, g_free);
+ wav->cues = NULL;
+ if (wav->labls)
+ g_list_free_full (wav->labls, g_free);
+ wav->labls = NULL;
if (wav->caps)
gst_caps_unref (wav->caps);
wav->caps = NULL;
@@ -805,11 +842,7 @@
if (!event || wav->state != GST_WAVPARSE_DATA) {
if (wav->start_segment)
gst_event_unref (wav->start_segment);
- // TODO
-/* wav->start_segment =
- gst_event_new_new_segment (FALSE, wav->segment.rate,
- wav->segment.format, wav->segment.last_stop, wav->segment.duration,
- wav->segment.last_stop);*/
+ wav->start_segment = gst_event_new_segment (&wav->segment);
res = TRUE;
} else {
/* convert seek positions to byte positions in data sections */
@@ -963,7 +996,7 @@
/* and start the streaming task again */
if (!wav->streaming) {
gst_pad_start_task (wav->sinkpad, (GstTaskFunction) gst_wavparse_loop,
- wav->sinkpad);
+ wav->sinkpad, NULL);
}
GST_PAD_STREAM_UNLOCK (wav->sinkpad);
@@ -1115,6 +1148,203 @@
return TRUE;
}
+/*
+ * gst_wavparse_cue_chunk:
+ * @wav GstWavParse object
+ * @data holder for data
+ * @size holder for data size
+ *
+ * Parse cue chunk from @data to wav->cues.
+ *
+ * Returns: %TRUE when cue chunk is available
+ */
+static gboolean
+gst_wavparse_cue_chunk (GstWavParse * wav, const guint8 * data, guint32 size)
+{
+ guint32 i, ncues;
+ GList *cues = NULL;
+ GstWavParseCue *cue;
+
+ if (wav->cues) {
+ GST_WARNING_OBJECT (wav, "found another cue's");
+ return TRUE;
+ }
+
+ ncues = GST_READ_UINT32_LE (data);
+
+ if (size < 4 + ncues * 24) {
+ GST_WARNING_OBJECT (wav, "broken file %d %d", size, ncues);
+ return FALSE;
+ }
+
+ /* parse data */
+ data += 4;
+ for (i = 0; i < ncues; i++) {
+ cue = g_new0 (GstWavParseCue, 1);
+ cue->id = GST_READ_UINT32_LE (data);
+ cue->position = GST_READ_UINT32_LE (data + 4);
+ cue->data_chunk_id = GST_READ_UINT32_LE (data + 8);
+ cue->chunk_start = GST_READ_UINT32_LE (data + 12);
+ cue->block_start = GST_READ_UINT32_LE (data + 16);
+ cue->sample_offset = GST_READ_UINT32_LE (data + 20);
+ cues = g_list_append (cues, cue);
+ data += 24;
+ }
+
+ wav->cues = cues;
+
+ return TRUE;
+}
+
+/*
+ * gst_wavparse_labl_chunk:
+ * @wav GstWavParse object
+ * @data holder for data
+ * @size holder for data size
+ *
+ * Parse labl from @data to wav->labls.
+ *
+ * Returns: %TRUE when labl chunk is available
+ */
+static gboolean
+gst_wavparse_labl_chunk (GstWavParse * wav, const guint8 * data, guint32 size)
+{
+ GstWavParseLabl *labl;
+
+ if (size < 5)
+ return FALSE;
+
+ labl = g_new0 (GstWavParseLabl, 1);
+
+ /* parse data */
+ data += 8;
+ labl->cue_point_id = GST_READ_UINT32_LE (data);
+ labl->text = (gchar *) g_new0 (gchar *, size - 4 + 1);
+ memcpy (labl->text, data + 4, size - 4);
+
+ wav->labls = g_list_append (wav->labls, labl);
+
+ return TRUE;
+}
+
+/*
+ * gst_wavparse_adtl_chunk:
+ * @wav GstWavParse object
+ * @data holder for data
+ * @size holder for data size
+ *
+ * Parse adtl from @data.
+ *
+ * Returns: %TRUE when adtl chunk is available
+ */
+static gboolean
+gst_wavparse_adtl_chunk (GstWavParse * wav, const guint8 * data, guint32 size)
+{
+ guint32 ltag, lsize, offset = 0;
+
+ while (size >= 8) {
+ ltag = GST_READ_UINT32_LE (data + offset);
+ lsize = GST_READ_UINT32_LE (data + offset + 4);
+ switch (ltag) {
+ case GST_RIFF_TAG_labl:
+ gst_wavparse_labl_chunk (wav, data + offset, size);
+ default:
+ break;
+ }
+ offset += 8 + GST_ROUND_UP_2 (lsize);
+ size -= 8 + GST_ROUND_UP_2 (lsize);
+ }
+
+ return TRUE;
+}
+
+/*
+ * gst_wavparse_create_toc:
+ * @wav GstWavParse object
+ *
+ * Create TOC from wav->cues and wav->labls.
+ */
+static gboolean
+gst_wavparse_create_toc (GstWavParse * wav)
+{
+ gint64 start, stop;
+ gchar *id;
+ GList *list;
+ GstWavParseCue *cue;
+ GstWavParseLabl *labl;
+ GstTagList *tags;
+ GstToc *toc;
+ GstTocEntry *entry = NULL, *cur_subentry = NULL, *prev_subentry = NULL;
+
+ GST_OBJECT_LOCK (wav);
+ if (wav->toc) {
+ GST_OBJECT_UNLOCK (wav);
+ GST_WARNING_OBJECT (wav, "found another TOC");
+ return FALSE;
+ }
+
+ if (!wav->cues) {
+ GST_OBJECT_UNLOCK (wav);
+ return TRUE;
+ }
+
+ /* FIXME: send CURRENT scope toc too */
+ toc = gst_toc_new (GST_TOC_SCOPE_GLOBAL);
+
+ /* add cue edition */
+ entry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_EDITION, "cue");
+ gst_toc_entry_set_start_stop_times (entry, 0, wav->duration);
+ gst_toc_append_entry (toc, entry);
+
+ /* add chapters in cue edition */
+ list = g_list_first (wav->cues);
+ while (list) {
+ cue = list->data;
+ prev_subentry = cur_subentry;
+ /* previous chapter stop time = current chapter start time */
+ if (prev_subentry != NULL) {
+ gst_toc_entry_get_start_stop_times (prev_subentry, &start, NULL);
+ stop = gst_util_uint64_scale_round (cue->position, GST_SECOND, wav->rate);
+ gst_toc_entry_set_start_stop_times (prev_subentry, start, stop);
+ }
+ id = g_strdup_printf ("%08x", cue->id);
+ cur_subentry = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER, id);
+ g_free (id);
+ start = gst_util_uint64_scale_round (cue->position, GST_SECOND, wav->rate);
+ stop = wav->duration;
+ gst_toc_entry_set_start_stop_times (cur_subentry, start, stop);
+ gst_toc_entry_append_sub_entry (entry, cur_subentry);
+ list = g_list_next (list);
+ }
+
+ /* add tags in chapters */
+ list = g_list_first (wav->labls);
+ while (list) {
+ labl = list->data;
+ id = g_strdup_printf ("%08x", labl->cue_point_id);
+ cur_subentry = gst_toc_find_entry (toc, id);
+ g_free (id);
+ if (cur_subentry != NULL) {
+ tags = gst_tag_list_new_empty ();
+ gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, labl->text,
+ NULL);
+ gst_toc_entry_set_tags (cur_subentry, tags);
+ }
+ list = g_list_next (list);
+ }
+
+ /* send data as TOC */
+ wav->toc = toc;
+
+ /* send TOC event */
+ if (wav->toc) {
+ GST_OBJECT_UNLOCK (wav);
+ gst_pad_push_event (wav->srcpad, gst_event_new_toc (wav->toc, FALSE));
+ }
+
+ return TRUE;
+}
+
#define MAX_BUFFER_SIZE 4096
static GstFlowReturn
@@ -1203,7 +1433,7 @@
wav->rate = header->rate;
wav->channels = header->channels;
wav->blockalign = header->blockalign;
- wav->depth = header->size;
+ wav->depth = header->bits_per_sample;
wav->av_bps = header->av_bps;
wav->vbr = FALSE;
@@ -1497,14 +1727,40 @@
wav->tags =
gst_tag_list_merge (old, new, GST_TAG_MERGE_REPLACE);
if (old)
- gst_tag_list_free (old);
- gst_tag_list_free (new);
+ gst_tag_list_unref (old);
+ gst_tag_list_unref (new);
}
gst_buffer_unref (buf);
wav->offset += GST_ROUND_UP_2 (data_size);
}
break;
}
+ case GST_RIFF_LIST_adtl:{
+ const gint data_size = size;
+
+ GST_INFO_OBJECT (wav, "Have 'adtl' LIST, size %u", data_size);
+ if (wav->streaming) {
+ const guint8 *data = NULL;
+
+ gst_adapter_flush (wav->adapter, 12);
+ data = gst_adapter_map (wav->adapter, data_size);
+ gst_wavparse_adtl_chunk (wav, data, data_size);
+ gst_adapter_unmap (wav->adapter);
+ } else {
+ GstMapInfo map;
+
+ gst_buffer_unref (buf);
+ buf = NULL;
+ if ((res =
+ gst_pad_pull_range (wav->sinkpad, wav->offset + 12,
+ data_size, &buf)) != GST_FLOW_OK)
+ goto header_read_error;
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ gst_wavparse_adtl_chunk (wav, (const guint8 *) map.data,
+ data_size);
+ gst_buffer_unmap (buf, &map);
+ }
+ }
default:
GST_INFO_OBJECT (wav, "Ignoring LIST chunk %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (ltag));
@@ -1515,6 +1771,50 @@
}
break;
}
+ case GST_RIFF_TAG_cue:{
+ const guint data_size = size;
+
+ GST_DEBUG_OBJECT (wav, "Have 'cue' TAG, size : %u", data_size);
+ if (wav->streaming) {
+ const guint8 *data = NULL;
+
+ if (!gst_wavparse_peek_chunk (wav, &tag, &size)) {
+ goto exit;
+ }
+ gst_adapter_flush (wav->adapter, 8);
+ wav->offset += 8;
+ data = gst_adapter_map (wav->adapter, data_size);
+ if (!gst_wavparse_cue_chunk (wav, data, data_size)) {
+ goto header_read_error;
+ }
+ gst_adapter_unmap (wav->adapter);
+ } else {
+ GstMapInfo map;
+
+ wav->offset += 8;
+ gst_buffer_unref (buf);
+ buf = NULL;
+ if ((res =
+ gst_pad_pull_range (wav->sinkpad, wav->offset,
+ data_size, &buf)) != GST_FLOW_OK)
+ goto header_read_error;
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ if (!gst_wavparse_cue_chunk (wav, (const guint8 *) map.data,
+ data_size)) {
+ goto header_read_error;
+ }
+ gst_buffer_unmap (buf, &map);
+ }
+ size = GST_ROUND_UP_2 (size);
+ if (wav->streaming) {
+ gst_adapter_flush (wav->adapter, size);
+ } else {
+ gst_buffer_unref (buf);
+ }
+ size = GST_ROUND_UP_2 (size);
+ wav->offset += size;
+ break;
+ }
default:
if (!gst_waveparse_ignore_chunk (wav, buf, tag, size))
/* need more data */
@@ -1545,6 +1845,8 @@
gst_segment_init (&wav->segment, GST_FORMAT_TIME);
if (!wav->ignore_length)
wav->segment.duration = wav->duration;
+ if (!wav->toc)
+ gst_wavparse_create_toc (wav);
} else {
/* no bitrate, let downstream peer do the math, we'll feed it bytes. */
gst_segment_init (&wav->segment, GST_FORMAT_BYTES);
@@ -1786,8 +2088,7 @@
}
if (wav->tags) {
- gst_pad_push_event (wav->srcpad, gst_event_new_tag ("GstParser",
- wav->tags));
+ gst_pad_push_event (wav->srcpad, gst_event_new_tag (wav->tags));
wav->tags = NULL;
}
}
@@ -2072,6 +2373,8 @@
gst_element_post_message (GST_ELEMENT_CAST (wav),
gst_message_new_segment_done (GST_OBJECT_CAST (wav),
wav->segment.format, stop));
+ gst_pad_push_event (wav->srcpad,
+ gst_event_new_segment_done (wav->segment.format, stop));
} else {
gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
}
@@ -2228,7 +2531,8 @@
segment.stop = stop;
/* accept upstream's notion of segment and distribute along */
- segment.time = segment.start = segment.position;
+ segment.format = wav->segment.format;
+ segment.time = segment.position = segment.start;
segment.duration = wav->segment.duration;
segment.base = gst_segment_to_running_time (&wav->segment,
GST_FORMAT_TIME, wav->segment.position);
@@ -2443,14 +2747,14 @@
GST_INFO_OBJECT (wav, "pos query at %" G_GINT64_FORMAT, curb);
switch (format) {
- case GST_FORMAT_TIME:
- res = gst_wavparse_pad_convert (pad, GST_FORMAT_BYTES, curb,
- &format, &cur);
- break;
- default:
+ case GST_FORMAT_BYTES:
format = GST_FORMAT_BYTES;
cur = curb;
break;
+ default:
+ res = gst_wavparse_pad_convert (pad, GST_FORMAT_BYTES, curb,
+ &format, &cur);
+ break;
}
if (res)
gst_query_set_position (query, format, cur);
@@ -2469,18 +2773,22 @@
gst_query_parse_duration (query, &format, NULL);
switch (format) {
- case GST_FORMAT_TIME:{
+ case GST_FORMAT_BYTES:{
+ format = GST_FORMAT_BYTES;
+ duration = wav->datasize;
+ break;
+ }
+ case GST_FORMAT_TIME:
if ((res = gst_wavparse_calculate_duration (wav))) {
duration = wav->duration;
}
break;
- }
default:
- format = GST_FORMAT_BYTES;
- duration = wav->datasize;
+ res = FALSE;
break;
}
- gst_query_set_duration (query, format, duration);
+ if (res)
+ gst_query_set_duration (query, format, duration);
break;
}
case GST_QUERY_CONVERT:
@@ -2547,6 +2855,47 @@
}
gst_event_unref (event);
break;
+
+ case GST_EVENT_TOC_SELECT:
+ {
+ char *uid = NULL;
+ GstTocEntry *entry = NULL;
+ GstEvent *seek_event;
+ gint64 start_pos;
+
+ if (!wavparse->toc) {
+ GST_DEBUG_OBJECT (wavparse, "no TOC to select");
+ return FALSE;
+ } else {
+ gst_event_parse_toc_select (event, &uid);
+ if (uid != NULL) {
+ GST_OBJECT_LOCK (wavparse);
+ entry = gst_toc_find_entry (wavparse->toc, uid);
+ if (entry == NULL) {
+ GST_OBJECT_UNLOCK (wavparse);
+ GST_WARNING_OBJECT (wavparse, "no TOC entry with given UID: %s",
+ uid);
+ res = FALSE;
+ } else {
+ gst_toc_entry_get_start_stop_times (entry, &start_pos, NULL);
+ GST_OBJECT_UNLOCK (wavparse);
+ seek_event = gst_event_new_seek (1.0,
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_FLUSH,
+ GST_SEEK_TYPE_SET, start_pos, GST_SEEK_TYPE_SET, -1);
+ res = gst_wavparse_perform_seek (wavparse, seek_event);
+ gst_event_unref (seek_event);
+ }
+ g_free (uid);
+ } else {
+ GST_WARNING_OBJECT (wavparse, "received empty TOC select event");
+ res = FALSE;
+ }
+ }
+ gst_event_unref (event);
+ break;
+ }
+
default:
res = gst_pad_push_event (wavparse->sinkpad, event);
break;
@@ -2608,7 +2957,7 @@
if (active) {
/* if we have a scheduler we can start the task */
res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_wavparse_loop,
- sinkpad);
+ sinkpad, NULL);
} else {
res = gst_pad_stop_task (sinkpad);
}
diff --git a/gst/wavparse/gstwavparse.h b/gst/wavparse/gstwavparse.h
index 82838e4..ad8e02b 100644
--- a/gst/wavparse/gstwavparse.h
+++ b/gst/wavparse/gstwavparse.h
@@ -66,6 +66,9 @@
* the format for sure */
GstCaps *caps;
GstTagList *tags;
+ GstToc *toc;
+ GList *cues;
+ GList *labls;
GstEvent *start_segment;
/* WAVE decoding state */
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index ee80d96..975ac73 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -246,7 +246,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/ltmain.sh b/ltmain.sh
index c7d06c3..33f642a 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -70,7 +70,7 @@
# compiler: $LTCC
# compiler flags: $LTCFLAGS
# linker: $LD (gnu? $with_gnu_ld)
-# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1
+# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.1
# automake: $automake_version
# autoconf: $autoconf_version
#
@@ -80,7 +80,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1"
+VERSION="2.4.2 Debian-2.4.2-1.1"
TIMESTAMP=""
package_revision=1.3337
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 8017ae3..bae9326 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -180,7 +180,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 828104c..534d1cc 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -2512,17 +2512,6 @@
esac
;;
-gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
- soname_spec='${libname}${release}${shared_ext}$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
haiku*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
@@ -2639,7 +2628,7 @@
;;
# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
@@ -3255,10 +3244,6 @@
fi
;;
-gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
haiku*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3297,7 +3282,7 @@
;;
# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -4049,7 +4034,7 @@
;;
esac
;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
KCC*)
# KAI C++ Compiler
@@ -4348,7 +4333,7 @@
_LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
# old Intel for x86_64 which still supported -KPIC.
ecc*)
@@ -6241,9 +6226,6 @@
_LT_TAGVAR(ld_shlibs, $1)=yes
;;
- gnu*)
- ;;
-
haiku*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
_LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -6405,7 +6387,7 @@
_LT_TAGVAR(inherit_rpath, $1)=yes
;;
- linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
case $cc_basename in
KCC*)
# Kuck and Associates, Inc. (KAI) C++ Compiler
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 1b5e806..32888c2 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -181,7 +181,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/po/af.gmo b/po/af.gmo
index 594426d..d9b0041 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 6f57896..2bc1114 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.7.6\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2004-03-18 14:16+0200\n"
"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.gmo b/po/az.gmo
index 3b1178d..e7afe54 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 004031f..f2c996a 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2004-03-19 18:29+0200\n"
"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index d9c2a8c..a2a7ad0 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index dc897d1..f6509b5 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-04-26 22:35+0300\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
diff --git a/po/ca.gmo b/po/ca.gmo
index d7d7dee..90ce5c5 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index e27ecf9..ac976ca 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2012-01-01 14:19+0100\n"
"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index 68a7141..cb3b497 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 072d313..b8a759b 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-12 23:07+0100\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.gmo b/po/da.gmo
index 3ab7c63..2027e96 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 47971cc..d9357a2 100644
--- a/po/da.po
+++ b/po/da.po
@@ -12,7 +12,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-07 23:54+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index d8e55b3..694efbb 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 6b33e5b..356c7ae 100644
--- a/po/de.po
+++ b/po/de.po
@@ -14,7 +14,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-21 22:36+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.gmo b/po/el.gmo
index 3a4eb71..44f4f9f 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 405d26a..63ab464 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-10-27 12:16+0200\n"
"Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 99af035..48667f5 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 68c1b6b..5283f4b 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2004-04-26 10:41-0400\n"
"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
"Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/eo.gmo b/po/eo.gmo
index 657ea79..075b3c8 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index d90e6fa..bfa5be7 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-06-04 21:48+0100\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index eeef4aa..cf6f155 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 4230ccb..b39672c 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-02-12 18:30+0100\n"
"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index 8f758e7..9471959 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index de12454..9cebc35 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.18.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-03-25 12:37+0100\n"
"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index 65f49d1..5eef592 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 3fdfe40..47fe305 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-11-17 23:03+0200\n"
"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index b5d5cf2..e23760e 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 4341608..7b69b49 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-04-28 09:22+0200\n"
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
"Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.gmo b/po/gl.gmo
index 5e6c846..9ca0943 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 30bd09d..f0c083b 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-09 21:20+0100\n"
"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot
index 59798f7..9ca8fe7 100644
--- a/po/gst-plugins-good-1.0.pot
+++ b/po/gst-plugins-good-1.0.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 0.11.92\n"
+"Project-Id-Version: gst-plugins-good 0.11.93\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,7 +22,7 @@
msgid "'%s' by '%s'"
msgstr ""
-#: ext/jpeg/gstjpegdec.c:251
+#: ext/jpeg/gstjpegdec.c:250
msgid "Failed to decode JPEG image"
msgstr ""
@@ -30,36 +30,36 @@
msgid "Could not connect to server"
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:805
+#: ext/soup/gstsouphttpsrc.c:804
msgid "Server does not support seeking."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1021
+#: ext/soup/gstsouphttpsrc.c:1020
msgid "Could not resolve server name."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1027
+#: ext/soup/gstsouphttpsrc.c:1026
msgid "Could not establish connection to server."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1032
+#: ext/soup/gstsouphttpsrc.c:1031
msgid "Secure connection setup failed."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1037
+#: ext/soup/gstsouphttpsrc.c:1036
msgid ""
"A network error occured, or the server closed the connection unexpectedly."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1043
+#: ext/soup/gstsouphttpsrc.c:1042
msgid "Server sent bad data."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1188
+#: ext/soup/gstsouphttpsrc.c:1187
msgid "No URL set."
msgstr ""
-#: gst/avi/gstavidemux.c:5223
+#: gst/avi/gstavidemux.c:5234
msgid "Internal data stream error."
msgstr ""
@@ -71,50 +71,50 @@
msgid "This file contains no playable streams."
msgstr ""
-#: gst/isomp4/qtdemux.c:592 gst/isomp4/qtdemux.c:4086
-#: gst/isomp4/qtdemux.c:4156 gst/isomp4/qtdemux.c:4307
+#: gst/isomp4/qtdemux.c:592 gst/isomp4/qtdemux.c:4081
+#: gst/isomp4/qtdemux.c:4147 gst/isomp4/qtdemux.c:4294
msgid "This file is invalid and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:2455 gst/isomp4/qtdemux.c:2531
-#: gst/isomp4/qtdemux.c:2574 gst/isomp4/qtdemux.c:4910
-#: gst/isomp4/qtdemux.c:4917 gst/isomp4/qtdemux.c:5534
-#: gst/isomp4/qtdemux.c:5962 gst/isomp4/qtdemux.c:5969
-#: gst/isomp4/qtdemux.c:7540
+#: gst/isomp4/qtdemux.c:2448 gst/isomp4/qtdemux.c:2524
+#: gst/isomp4/qtdemux.c:2567 gst/isomp4/qtdemux.c:4897
+#: gst/isomp4/qtdemux.c:4904 gst/isomp4/qtdemux.c:5528
+#: gst/isomp4/qtdemux.c:5956 gst/isomp4/qtdemux.c:5963
+#: gst/isomp4/qtdemux.c:7534
msgid "This file is corrupt and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:2665
+#: gst/isomp4/qtdemux.c:2658
msgid "Invalid atom size."
msgstr ""
-#: gst/isomp4/qtdemux.c:2731
+#: gst/isomp4/qtdemux.c:2724
msgid "This file is incomplete and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:5132
+#: gst/isomp4/qtdemux.c:5119
msgid "The video in this file might not play correctly."
msgstr ""
-#: gst/isomp4/qtdemux.c:7569
+#: gst/isomp4/qtdemux.c:7563
#, c-format
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-#: gst/rtsp/gstrtspsrc.c:5340
+#: gst/rtsp/gstrtspsrc.c:5337
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
msgstr ""
-#: gst/rtsp/gstrtspsrc.c:5345
+#: gst/rtsp/gstrtspsrc.c:5342
msgid ""
"No supported stream was found. You might need to allow more transport "
"protocols or may otherwise be missing the right GStreamer RTSP extension "
"plugin."
msgstr ""
-#: gst/wavparse/gstwavparse.c:2082
+#: gst/wavparse/gstwavparse.c:2385
msgid "Internal data flow error."
msgstr ""
@@ -205,7 +205,7 @@
msgid "AUX 2 Out"
msgstr ""
-#: sys/v4l2/gstv4l2bufferpool.c:991
+#: sys/v4l2/gstv4l2bufferpool.c:1007
#, c-format
msgid "Error reading %d bytes from device '%s'."
msgstr ""
@@ -215,65 +215,65 @@
msgid "Failed to enumerate possible video formats device '%s' can work with"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2177
+#: sys/v4l2/gstv4l2object.c:2186
#, c-format
msgid "Could not map buffers from device '%s'"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2185
+#: sys/v4l2/gstv4l2object.c:2194
#, c-format
msgid "The driver of device '%s' does not support the IO method %d"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2192
+#: sys/v4l2/gstv4l2object.c:2201
#, c-format
msgid "The driver of device '%s' does not support any known IO method."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2386
+#: sys/v4l2/gstv4l2object.c:2395
#, c-format
msgid "Device '%s' does not support video capture"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2395
+#: sys/v4l2/gstv4l2object.c:2404
#, c-format
msgid "Device '%s' is busy"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2401 sys/v4l2/gstv4l2object.c:2412
+#: sys/v4l2/gstv4l2object.c:2410 sys/v4l2/gstv4l2object.c:2421
#, c-format
msgid "Device '%s' cannot capture at %dx%d"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2421
+#: sys/v4l2/gstv4l2object.c:2430
#, c-format
msgid "Device '%s' cannot capture in the specified format"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2434
+#: sys/v4l2/gstv4l2object.c:2443
#, c-format
msgid "Could not get parameters on device '%s'"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2442
+#: sys/v4l2/gstv4l2object.c:2451
msgid "Video device did not accept new frame rate setting."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2449
+#: sys/v4l2/gstv4l2object.c:2458
msgid "Video device could not create buffer pool."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2526
+#: sys/v4l2/gstv4l2object.c:2535
#, c-format
msgid "Got unexpected frame size of %u instead of %u."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2592
+#: sys/v4l2/gstv4l2object.c:2601
#, c-format
msgid "Failed trying to get video frames from device '%s'."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2594
+#: sys/v4l2/gstv4l2object.c:2603
#, c-format
msgid "Failed after %d tries. device %s. system error: %s"
msgstr ""
diff --git a/po/hu.gmo b/po/hu.gmo
index d20f1f1..95c08a9 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 3e240bb..b17cffc 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-11-04 01:21+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index 7959456..ac32556 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index af532cb..54992c1 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-02-26 18:09+0700\n"
"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index 5e69706..b7d5106 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index df35dcd..f588c23 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-10-25 10:11+0200\n"
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index 30256dc..9bb0fd7 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index fc820b5..e8ba9bc 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-08-28 23:59+0900\n"
"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index 83b9eec..f30211d 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 13b2e15..a3225ce 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.23.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-07-16 19:34+0300\n"
"Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index 02b298c..420a723 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 1dddbf1..c0d2a6a 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-09-02 11:23-0000\n"
"Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/mt.gmo b/po/mt.gmo
index e4c0184..a68d6bc 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index d725361..bfeff7e 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.10.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2008-10-26 19:09+0100\n"
"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index 90eee2f..fc9c997 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 51f8a64..846fa61 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-10-24 21:53+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index 24a2224..3479b26 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 61ec863..5643347 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-04-27 00:05+0200\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
diff --git a/po/or.gmo b/po/or.gmo
index 72cb77f..b6a7db4 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index df174e1..dbb4aa2 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2004-09-27 13:32+0530\n"
"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index 8b32dc9..7eee5b3 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 4b0da15..c800cf0 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-07 21:53+0100\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 3716f8a..fbfc8c7 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 72cf7c3..0e0a273 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -11,7 +11,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-08 01:28-0300\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
diff --git a/po/ro.gmo b/po/ro.gmo
index 05fcf6c..5520dff 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 85353d2..74c2bfc 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.23.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-08-16 03:22+0300\n"
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 1517e22..5fca62e 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index ef696c2..36b1af7 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-04-26 21:13+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index 5c3e0c3..64c4797 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 1da8ff5..27264cf 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-11-08 15:48+0100\n"
"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index a9a0516..788d2b5 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index cbf8b01..de120e9 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-03-12 18:35+0100\n"
"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index ac7643f..474d44c 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 13dbc91..febdace 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2004-08-07 20:29+0200\n"
"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
"Language-Team: Albanian <begraj@hotmail.com>\n"
diff --git a/po/sr.gmo b/po/sr.gmo
index 8bcc75f..11cda91 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 17e0317..e6f5125 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-12-04 16:44+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnu@prevod.org>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 39897d0..967aa14 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 330fad7..76c278a 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-09 19:36+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index 0c03c15..15d56d8 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index f6587da..e45db29 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-01-08 00:03+0200\n"
"Last-Translator: Server Acim <serveracim@gmail.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index d8d21a4..a6f6f8e 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index e9d8091..c721395 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2011-05-01 11:55+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index 9474a98..d058e95 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index e8d5f44..9554bac 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.23.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2010-10-03 18:48+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 4416784..74a2923 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 8503ed0..37fbe8f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.16.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2009-11-13 22:20+0800\n"
"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
index e9986ca..4f1458b 100644
--- a/po/zh_HK.gmo
+++ b/po/zh_HK.gmo
Binary files differ
diff --git a/po/zh_HK.po b/po/zh_HK.po
index 3d5dc9d..9abc794 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2006-08-29 01:08+0800\n"
"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 698da29..a217185 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 6025c75..5cb5fb4 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-06-07 16:10+0200\n"
+"POT-Creation-Date: 2012-08-08 11:33+0100\n"
"PO-Revision-Date: 2006-08-29 01:08+0800\n"
"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
diff --git a/sys/Makefile.in b/sys/Makefile.in
index b5d4e33..fa0316c 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -231,7 +231,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index 1c809e1..f45bdde 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/directsound/gstdirectsoundsink.c b/sys/directsound/gstdirectsoundsink.c
index fec8f92..9e82bb0 100644
--- a/sys/directsound/gstdirectsoundsink.c
+++ b/sys/directsound/gstdirectsoundsink.c
@@ -55,6 +55,7 @@
#include <gst/base/gstbasesink.h>
#include <gst/audio/streamvolume.h>
#include "gstdirectsoundsink.h"
+#include <gst/audio/gstaudioiec61937.h>
#include <math.h>
@@ -79,6 +80,8 @@
static GstCaps *gst_directsound_sink_getcaps (GstBaseSink * bsink,
GstCaps * filter);
+static GstBuffer *gst_directsound_sink_payload (GstAudioBaseSink * sink,
+ GstBuffer * buf);
static gboolean gst_directsound_sink_prepare (GstAudioSink * asink,
GstAudioRingBufferSpec * spec);
static gboolean gst_directsound_sink_unprepare (GstAudioSink * asink);
@@ -90,6 +93,8 @@
static void gst_directsound_sink_reset (GstAudioSink * asink);
static GstCaps *gst_directsound_probe_supported_formats (GstDirectSoundSink *
dsoundsink, const GstCaps * template_caps);
+static gboolean gst_directsound_sink_query (GstBaseSink * pad,
+ GstQuery * query);
static void gst_directsound_sink_set_volume (GstDirectSoundSink * sink,
gdouble volume, gboolean store);
@@ -98,6 +103,9 @@
gboolean mute);
static gboolean gst_directsound_sink_get_mute (GstDirectSoundSink * sink);
+static gboolean gst_directsound_sink_is_spdif_format (GstAudioRingBufferSpec *
+ spec);
+
static GstStaticPadTemplate directsoundsink_sink_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
@@ -110,7 +118,8 @@
"format = (string) S8, "
"layout = (string) interleaved, "
"rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ];"
- "audio/x-iec958"));
+ "audio/x-ac3, framed = (boolean) true;"
+ "audio/x-dts, framed = (boolean) true;"));
enum
{
@@ -136,6 +145,8 @@
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstBaseSinkClass *gstbasesink_class = GST_BASE_SINK_CLASS (klass);
GstAudioSinkClass *gstaudiosink_class = GST_AUDIO_SINK_CLASS (klass);
+ GstAudioBaseSinkClass *gstaudiobasesink_class =
+ GST_AUDIO_BASE_SINK_CLASS (klass);
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
GST_DEBUG_CATEGORY_INIT (directsoundsink_debug, "directsoundsink", 0,
@@ -150,6 +161,11 @@
gstbasesink_class->get_caps =
GST_DEBUG_FUNCPTR (gst_directsound_sink_getcaps);
+ gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_directsound_sink_query);
+
+ gstaudiobasesink_class->payload =
+ GST_DEBUG_FUNCPTR (gst_directsound_sink_payload);
+
gstaudiosink_class->prepare =
GST_DEBUG_FUNCPTR (gst_directsound_sink_prepare);
gstaudiosink_class->unprepare =
@@ -275,6 +291,90 @@
}
static gboolean
+gst_directsound_sink_acceptcaps (GstBaseSink * sink, GstQuery * query)
+{
+ GstDirectSoundSink *dsink = GST_DIRECTSOUND_SINK (sink);
+ GstPad *pad;
+ GstCaps *caps;
+ GstCaps *pad_caps;
+ GstStructure *st;
+ gboolean ret = FALSE;
+ GstAudioRingBufferSpec spec = { 0 };
+
+ if (G_UNLIKELY (dsink == NULL))
+ return FALSE;
+
+ pad = sink->sinkpad;
+
+ gst_query_parse_accept_caps (query, &caps);
+ GST_DEBUG_OBJECT (pad, "caps %" GST_PTR_FORMAT, caps);
+
+ pad_caps = gst_pad_query_caps (pad, NULL);
+ if (pad_caps) {
+ gboolean cret = gst_caps_can_intersect (pad_caps, caps);
+ gst_caps_unref (pad_caps);
+ if (!cret) {
+ GST_DEBUG_OBJECT (dsink, "Can't intersect caps, not accepting caps");
+ goto done;
+ }
+ }
+
+ /* If we've not got fixed caps, creating a stream might fail, so let's just
+ * return from here with default acceptcaps behaviour */
+ if (!gst_caps_is_fixed (caps)) {
+ GST_DEBUG_OBJECT (dsink, "Caps are not fixed, not accepting caps");
+ goto done;
+ }
+
+ spec.latency_time = GST_SECOND;
+ if (!gst_audio_ring_buffer_parse_caps (&spec, caps)) {
+ GST_DEBUG_OBJECT (dsink, "Failed to parse caps, not accepting");
+ goto done;
+ }
+
+ /* Make sure input is framed (one frame per buffer) and can be payloaded */
+ switch (spec.type) {
+ case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3:
+ case GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS:
+ {
+ gboolean framed = FALSE, parsed = FALSE;
+ st = gst_caps_get_structure (caps, 0);
+
+ gst_structure_get_boolean (st, "framed", &framed);
+ gst_structure_get_boolean (st, "parsed", &parsed);
+ if ((!framed && !parsed) || gst_audio_iec61937_frame_size (&spec) <= 0) {
+ GST_DEBUG_OBJECT (dsink, "Wrong AC3/DTS caps, not accepting");
+ goto done;
+ }
+ }
+ default:
+ break;
+ }
+ ret = TRUE;
+ GST_DEBUG_OBJECT (dsink, "Accepting caps");
+
+done:
+ gst_query_set_accept_caps_result (query, ret);
+ return TRUE;
+}
+
+static gboolean
+gst_directsound_sink_query (GstBaseSink * sink, GstQuery * query)
+{
+ gboolean res = TRUE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_ACCEPT_CAPS:
+ res = gst_directsound_sink_acceptcaps (sink, query);
+ break;
+ default:
+ res = GST_BASE_SINK_CLASS (parent_class)->query (sink, query);
+ }
+
+ return res;
+}
+
+static gboolean
gst_directsound_sink_open (GstAudioSink * asink)
{
GstDirectSoundSink *dsoundsink;
@@ -302,6 +402,13 @@
}
static gboolean
+gst_directsound_sink_is_spdif_format (GstAudioRingBufferSpec * spec)
+{
+ return spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3 ||
+ spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS;
+}
+
+static gboolean
gst_directsound_sink_prepare (GstAudioSink * asink,
GstAudioRingBufferSpec * spec)
{
@@ -318,7 +425,7 @@
/* fill the WAVEFORMATEX structure with spec params */
memset (&wfx, 0, sizeof (wfx));
- if (spec->type != GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958) {
+ if (!gst_directsound_sink_is_spdif_format (spec)) {
wfx.cbSize = sizeof (wfx);
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = spec->info.channels;
@@ -345,7 +452,7 @@
wfx.cbSize = 0;
wfx.wFormatTag = WAVE_FORMAT_DOLBY_AC3_SPDIF;
wfx.nChannels = 2;
- wfx.nSamplesPerSec = spec->info.rate;
+ wfx.nSamplesPerSec = 48000;
wfx.wBitsPerSample = 16;
wfx.nBlockAlign = wfx.wBitsPerSample / 8 * wfx.nChannels;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
@@ -361,7 +468,7 @@
dsoundsink->buffer_size = spec->segsize * spec->segtotal;
GST_INFO_OBJECT (dsoundsink,
- "GstRingBufferSpec->channels: %d, GstRingBufferSpec->rate: %d, GstRingBufferSpec->bytes_per_sample: %d\n"
+ "GstAudioRingBufferSpec->channels: %d, GstAudioRingBufferSpec->rate: %d, GstAudioRingBufferSpec->bytes_per_sample: %d\n"
"WAVEFORMATEX.nSamplesPerSec: %ld, WAVEFORMATEX.wBitsPerSample: %d, WAVEFORMATEX.nBlockAlign: %d, WAVEFORMATEX.nAvgBytesPerSec: %ld\n"
"Size of dsound circular buffer=>%d\n", spec->info.channels,
spec->info.rate, spec->info.bpf, wfx.nSamplesPerSec, wfx.wBitsPerSample,
@@ -371,7 +478,7 @@
memset (&descSecondary, 0, sizeof (DSBUFFERDESC));
descSecondary.dwSize = sizeof (DSBUFFERDESC);
descSecondary.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS;
- if (spec->type != GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958)
+ if (!gst_directsound_sink_is_spdif_format (spec))
descSecondary.dwFlags |= DSBCAPS_CTRLVOLUME;
descSecondary.dwBufferBytes = dsoundsink->buffer_size;
@@ -436,10 +543,6 @@
dsoundsink = GST_DIRECTSOUND_SINK (asink);
- /* Fix endianness */
- if (dsoundsink->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958)
- _swab (data, data, length);
-
GST_DSOUND_LOCK (dsoundsink);
/* get current buffer status */
@@ -608,6 +711,8 @@
DSBUFFERDESC descSecondary;
WAVEFORMATEX wfx;
GstCaps *caps;
+ GstCaps *tmp, *tmp2;
+ LPDIRECTSOUNDBUFFER tmpBuffer;
caps = gst_caps_copy (template_caps);
@@ -634,16 +739,24 @@
descSecondary.lpwfxFormat = &wfx;
hRes = IDirectSound_CreateSoundBuffer (dsoundsink->pDS, &descSecondary,
- &dsoundsink->pDSBSecondary, NULL);
+ &tmpBuffer, NULL);
if (FAILED (hRes)) {
GST_INFO_OBJECT (dsoundsink, "AC3 passthrough not supported "
"(IDirectSound_CreateSoundBuffer returned: %s)\n",
DXGetErrorString9 (hRes));
- caps =
- gst_caps_subtract (caps, gst_caps_new_empty_simple ("audio/x-iec958"));
+ tmp = gst_caps_new_empty_simple ("audio/x-ac3");
+ tmp2 = gst_caps_subtract (caps, tmp);
+ gst_caps_unref (tmp);
+ gst_caps_unref (caps);
+ caps = tmp2;
+ tmp = gst_caps_new_empty_simple ("audio/x-dts");
+ tmp2 = gst_caps_subtract (caps, tmp);
+ gst_caps_unref (tmp);
+ gst_caps_unref (caps);
+ caps = tmp2;
} else {
GST_INFO_OBJECT (dsoundsink, "AC3 passthrough supported");
- hRes = IDirectSoundBuffer_Release (dsoundsink->pDSBSecondary);
+ hRes = IDirectSoundBuffer_Release (tmpBuffer);
if (FAILED (hRes)) {
GST_DEBUG_OBJECT (dsoundsink,
"(IDirectSoundBuffer_Release returned: %s)\n",
@@ -651,12 +764,63 @@
}
}
#else
- caps = gst_caps_subtract (caps, gst_caps_new_simple ("audio/x-iec958", NULL));
+ tmp = gst_caps_new_empty_simple ("audio/x-ac3");
+ tmp2 = gst_caps_subtract (caps, tmp);
+ gst_caps_unref (tmp);
+ gst_caps_unref (caps);
+ caps = tmp2;
+ tmp = gst_caps_new_empty_simple ("audio/x-dts");
+ tmp2 = gst_caps_subtract (caps, tmp);
+ gst_caps_unref (tmp);
+ gst_caps_unref (caps);
+ caps = tmp2;
#endif
return caps;
}
+static GstBuffer *
+gst_directsound_sink_payload (GstAudioBaseSink * sink, GstBuffer * buf)
+{
+ if (gst_directsound_sink_is_spdif_format (&sink->ringbuffer->spec)) {
+ gint framesize = gst_audio_iec61937_frame_size (&sink->ringbuffer->spec);
+ GstBuffer *out;
+ GstMapInfo infobuf, infoout;
+ gboolean success;
+
+ if (framesize <= 0)
+ return NULL;
+
+ out = gst_buffer_new_and_alloc (framesize);
+
+ if (!gst_buffer_map (buf, &infobuf, GST_MAP_READWRITE)) {
+ gst_buffer_unref (out);
+ return NULL;
+ }
+ if (!gst_buffer_map (out, &infoout, GST_MAP_READWRITE)) {
+ gst_buffer_unmap (buf, &infobuf);
+ gst_buffer_unref (out);
+ return NULL;
+ }
+ success = gst_audio_iec61937_payload (infobuf.data, infobuf.size,
+ infoout.data, infoout.size, &sink->ringbuffer->spec);
+ if (!success) {
+ gst_buffer_unmap (out, &infoout);
+ gst_buffer_unmap (buf, &infobuf);
+ gst_buffer_unref (out);
+ return NULL;
+ }
+
+ gst_buffer_copy_into (out, buf, GST_BUFFER_COPY_ALL, 0, -1);
+ /* Fix endianness */
+ _swab ((gchar *) infoout.data, (gchar *) infoout.data, infobuf.size);
+ gst_buffer_unmap (out, &infoout);
+ gst_buffer_unmap (buf, &infobuf);
+ return out;
+ } else
+ return gst_buffer_ref (buf);
+}
+
static void
gst_directsound_sink_set_volume (GstDirectSoundSink * dsoundsink,
gdouble dvolume, gboolean store)
diff --git a/sys/oss/Makefile.in b/sys/oss/Makefile.in
index ae49e36..2a02839 100644
--- a/sys/oss/Makefile.in
+++ b/sys/oss/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/oss4/Makefile.in b/sys/oss4/Makefile.in
index 2a284b4..f2f43da 100644
--- a/sys/oss4/Makefile.in
+++ b/sys/oss4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/oss4/oss4-audio.c b/sys/oss4/oss4-audio.c
index 11f6e5e..21a963f 100644
--- a/sys/oss4/oss4-audio.c
+++ b/sys/oss4/oss4-audio.c
@@ -282,7 +282,7 @@
} else if (GST_IS_OSS4_SOURCE (obj)) {
rb = GST_AUDIO_BASE_SRC (obj)->ringbuffer;
} else
- g_assert_not_reached ();
+ g_return_if_reached ();
/* -1 = get info for currently open device (fd). This will fail with
* OSS build <= 1013 because of a bug in OSS */
@@ -309,7 +309,8 @@
g_return_if_fail (num_channels <= G_N_ELEMENTS (ch_layout));
gst_oss4_audio_get_channel_layout (obj, layout, num_channels, ch_layout);
- if (gst_audio_channel_positions_to_mask (ch_layout, num_channels, &mask))
+ if (gst_audio_channel_positions_to_mask (ch_layout, num_channels, FALSE,
+ &mask))
gst_structure_set (s, "channel-mask", GST_TYPE_BITMASK, mask, NULL);
return;
diff --git a/sys/osxaudio/Makefile.am b/sys/osxaudio/Makefile.am
index 8c1c3f7..138e5ae 100644
--- a/sys/osxaudio/Makefile.am
+++ b/sys/osxaudio/Makefile.am
@@ -14,13 +14,14 @@
$(GST_PLUGINS_BASE_LIBS) \
$(GST_BASE_LIBS) \
$(GST_LIBS)
-libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,CoreServices
+libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,AudioToolbox -Wl,-framework -Wl,CoreServices
libgstosxaudio_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstosxaudiosink.h \
gstosxaudioelement.h \
gstosxringbuffer.h \
- gstosxaudiosrc.h
+ gstosxaudiosrc.h \
+ gstosxcoreaudio.h
diff --git a/sys/osxaudio/Makefile.in b/sys/osxaudio/Makefile.in
index 1285c9e..1f53fa6 100644
--- a/sys/osxaudio/Makefile.in
+++ b/sys/osxaudio/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -251,7 +251,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -519,12 +521,13 @@
$(GST_BASE_LIBS) \
$(GST_LIBS)
-libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,CoreServices
+libgstosxaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,CoreAudio -Wl,-framework -Wl,AudioUnit -Wl,-framework -Wl,AudioToolbox -Wl,-framework -Wl,CoreServices
libgstosxaudio_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstosxaudiosink.h \
gstosxaudioelement.h \
gstosxringbuffer.h \
- gstosxaudiosrc.h
+ gstosxaudiosrc.h \
+ gstosxcoreaudio.h
all: all-am
diff --git a/sys/osxaudio/gstosxaudiosink.c b/sys/osxaudio/gstosxaudiosink.c
index 639f499..99284d0 100644
--- a/sys/osxaudio/gstosxaudiosink.c
+++ b/sys/osxaudio/gstosxaudiosink.c
@@ -2,6 +2,7 @@
* GStreamer
* Copyright (C) 2005,2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* Copyright (C) 2007,2008 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -66,14 +67,19 @@
#endif
#include <gst/gst.h>
+#include <gst/audio/multichannel.h>
+#include <gst/audio/gstaudioiec61937.h>
#include <CoreAudio/CoreAudio.h>
#include <CoreAudio/AudioHardware.h>
+
#include "gstosxaudiosink.h"
#include "gstosxaudioelement.h"
GST_DEBUG_CATEGORY_STATIC (osx_audiosink_debug);
#define GST_CAT_DEFAULT osx_audiosink_debug
+#include "gstosxcoreaudio.h"
+
/* Filter signals and args */
enum
{
@@ -99,34 +105,36 @@
"width = (int) 32, "
"depth = (int) 32, "
"rate = (int) [1, MAX], "
- "channels = (int) [1, MAX];"
+ "channels = (int) [1, 9];"
"audio/x-raw-int, "
"endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
"signed = (boolean) { TRUE }, "
"width = (int) 32, "
"depth = (int) 32, "
"rate = (int) [1, MAX], "
- "channels = (int) [1, MAX];"
+ "channels = (int) [1, 9];"
"audio/x-raw-int, "
"endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
"signed = (boolean) { TRUE }, "
"width = (int) 24, "
"depth = (int) 24, "
"rate = (int) [1, MAX], "
- "channels = (int) [1, MAX];"
+ "channels = (int) [1, 9];"
"audio/x-raw-int, "
"endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
"signed = (boolean) { TRUE }, "
"width = (int) 16, "
"depth = (int) 16, "
"rate = (int) [1, MAX], "
- "channels = (int) [1, MAX];"
+ "channels = (int) [1, 9];"
"audio/x-raw-int, "
"endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
"signed = (boolean) { TRUE }, "
"width = (int) 8, "
"depth = (int) 8, "
- "rate = (int) [1, MAX], " "channels = (int) [1, MAX]")
+ "rate = (int) [1, MAX], " "channels = (int) [1, MAX];"
+ "audio/x-ac3, framed = (boolean) true;"
+ "audio/x-dts, framed = (boolean) true")
);
static void gst_osx_audio_sink_set_property (GObject * object, guint prop_id,
@@ -134,11 +142,17 @@
static void gst_osx_audio_sink_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
+static gboolean gst_osx_audio_sink_stop (GstBaseSink * base);
+static GstCaps *gst_osx_audio_sink_getcaps (GstBaseSink * base);
+static gboolean gst_osx_audio_sink_acceptcaps (GstPad * pad, GstCaps * caps);
+
+static GstBuffer *gst_osx_audio_sink_sink_payload (GstBaseAudioSink * sink,
+ GstBuffer * buf);
static GstRingBuffer *gst_osx_audio_sink_create_ringbuffer (GstBaseAudioSink *
sink);
static void gst_osx_audio_sink_osxelement_init (gpointer g_iface,
gpointer iface_data);
-static void gst_osx_audio_sink_select_device (GstOsxAudioSink * osxsink);
+static gboolean gst_osx_audio_sink_select_device (GstOsxAudioSink * osxsink);
static void gst_osx_audio_sink_set_volume (GstOsxAudioSink * sink);
static OSStatus gst_osx_audio_sink_io_proc (GstOsxRingBuffer * buf,
@@ -205,8 +219,13 @@
g_param_spec_double ("volume", "Volume", "Volume of this stream",
0, 1.0, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_osx_audio_sink_getcaps);
+ gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_osx_audio_sink_stop);
+
gstbaseaudiosink_class->create_ringbuffer =
GST_DEBUG_FUNCPTR (gst_osx_audio_sink_create_ringbuffer);
+ gstbaseaudiosink_class->payload =
+ GST_DEBUG_FUNCPTR (gst_osx_audio_sink_sink_payload);
}
static void
@@ -215,7 +234,12 @@
GST_DEBUG ("Initialising object");
sink->device_id = kAudioDeviceUnknown;
+ sink->cached_caps = NULL;
+
sink->volume = DEFAULT_VOLUME;
+
+ gst_pad_set_acceptcaps_function (GST_BASE_SINK (sink)->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_osx_audio_sink_acceptcaps));
}
static void
@@ -256,6 +280,141 @@
}
}
+static gboolean
+gst_osx_audio_sink_stop (GstBaseSink * base)
+{
+ GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (base);
+
+ if (sink->cached_caps) {
+ gst_caps_unref (sink->cached_caps);
+ sink->cached_caps = NULL;
+ }
+
+ return GST_CALL_PARENT_WITH_DEFAULT (GST_BASE_SINK_CLASS, stop, (base), TRUE);
+}
+
+static GstCaps *
+gst_osx_audio_sink_getcaps (GstBaseSink * base)
+{
+ GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (base);
+ gchar *caps_string = NULL;
+
+ if (sink->cached_caps) {
+ caps_string = gst_caps_to_string (sink->cached_caps);
+ GST_DEBUG_OBJECT (sink, "using cached caps: %s", caps_string);
+ g_free (caps_string);
+ return gst_caps_ref (sink->cached_caps);
+ }
+
+ GST_DEBUG_OBJECT (sink, "using template caps");
+ return NULL;
+}
+
+static gboolean
+gst_osx_audio_sink_acceptcaps (GstPad * pad, GstCaps * caps)
+{
+ GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (gst_pad_get_parent_element (pad));
+ GstOsxRingBuffer *osxbuf;
+ GstCaps *pad_caps;
+ GstStructure *st;
+ gboolean ret = FALSE;
+ GstRingBufferSpec spec = { 0 };
+ gchar *caps_string = NULL;
+
+ osxbuf = GST_OSX_RING_BUFFER (GST_BASE_AUDIO_SINK (sink)->ringbuffer);
+
+ caps_string = gst_caps_to_string (caps);
+ GST_DEBUG_OBJECT (sink, "acceptcaps called with %s", caps_string);
+ g_free (caps_string);
+
+ pad_caps = gst_pad_get_caps_reffed (pad);
+ if (pad_caps) {
+ gboolean cret = gst_caps_can_intersect (pad_caps, caps);
+ gst_caps_unref (pad_caps);
+ if (!cret)
+ goto done;
+ }
+
+ /* If we've not got fixed caps, creating a stream might fail,
+ * so let's just return from here with default acceptcaps
+ * behaviour */
+ if (!gst_caps_is_fixed (caps))
+ goto done;
+
+ /* parse helper expects this set, so avoid nasty warning
+ * will be set properly later on anyway */
+ spec.latency_time = GST_SECOND;
+ if (!gst_ring_buffer_parse_caps (&spec, caps))
+ goto done;
+
+ /* Make sure input is framed and can be payloaded */
+ switch (spec.type) {
+ case GST_BUFTYPE_AC3:
+ {
+ gboolean framed = FALSE;
+
+ st = gst_caps_get_structure (caps, 0);
+
+ gst_structure_get_boolean (st, "framed", &framed);
+ if (!framed || gst_audio_iec61937_frame_size (&spec) <= 0)
+ goto done;
+ break;
+ }
+ case GST_BUFTYPE_DTS:
+ {
+ gboolean parsed = FALSE;
+
+ st = gst_caps_get_structure (caps, 0);
+
+ gst_structure_get_boolean (st, "parsed", &parsed);
+ if (!parsed || gst_audio_iec61937_frame_size (&spec) <= 0)
+ goto done;
+ break;
+ }
+ default:
+ break;
+ }
+ ret = TRUE;
+
+done:
+ gst_object_unref (sink);
+ return ret;
+}
+
+static GstBuffer *
+gst_osx_audio_sink_sink_payload (GstBaseAudioSink * sink, GstBuffer * buf)
+{
+ GstOsxAudioSink *osxsink;
+
+ osxsink = GST_OSX_AUDIO_SINK (sink);
+
+ if (RINGBUFFER_IS_SPDIF (sink->ringbuffer->spec.type)) {
+ gint framesize = gst_audio_iec61937_frame_size (&sink->ringbuffer->spec);
+ GstBuffer *out;
+
+ if (framesize <= 0)
+ return NULL;
+
+ out = gst_buffer_new_and_alloc (framesize);
+
+ if (!gst_audio_iec61937_payload (GST_BUFFER_DATA (buf),
+ GST_BUFFER_SIZE (buf), GST_BUFFER_DATA (out),
+ GST_BUFFER_SIZE (out), &sink->ringbuffer->spec)) {
+ gst_buffer_unref (out);
+ return NULL;
+ }
+
+ gst_buffer_copy_metadata (out, buf, GST_BUFFER_COPY_ALL);
+
+ /* Fix endianness */
+ swab ((gchar *) GST_BUFFER_DATA (buf),
+ (gchar *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
+ return out;
+ } else {
+ return gst_buffer_ref (buf);
+ }
+}
+
static GstRingBuffer *
gst_osx_audio_sink_create_ringbuffer (GstBaseAudioSink * sink)
{
@@ -264,11 +423,13 @@
osxsink = GST_OSX_AUDIO_SINK (sink);
- gst_osx_audio_sink_select_device (osxsink);
+ if (!gst_osx_audio_sink_select_device (osxsink)) {
+ return NULL;
+ }
GST_DEBUG ("Creating ringbuffer");
ringbuffer = g_object_new (GST_TYPE_OSX_RING_BUFFER, NULL);
- GST_DEBUG ("osx sink 0x%p element 0x%p ioproc 0x%p", osxsink,
+ GST_DEBUG ("osx sink %p element %p ioproc %p", osxsink,
GST_OSX_AUDIO_ELEMENT_GET_INTERFACE (osxsink),
(void *) gst_osx_audio_sink_io_proc);
@@ -280,10 +441,10 @@
return GST_RING_BUFFER (ringbuffer);
}
-/* HALOutput AudioUnit will request fairly arbitrarily-sized chunks of data,
- * not of a fixed size. So, we keep track of where in the current ringbuffer
- * segment we are, and only advance the segment once we've read the whole
- * thing */
+/* HALOutput AudioUnit will request fairly arbitrarily-sized chunks
+ * of data, not of a fixed size. So, we keep track of where in
+ * the current ringbuffer segment we are, and only advance the segment
+ * once we've read the whole thing */
static OSStatus
gst_osx_audio_sink_io_proc (GstOsxRingBuffer * buf,
AudioUnitRenderActionFlags * ioActionFlags,
@@ -293,7 +454,8 @@
guint8 *readptr;
gint readseg;
gint len;
- gint remaining = bufferList->mBuffers[0].mDataByteSize;
+ gint stream_idx = buf->stream_idx;
+ gint remaining = bufferList->mBuffers[stream_idx].mDataByteSize;
gint offset = 0;
while (remaining) {
@@ -306,7 +468,7 @@
if (len > remaining)
len = remaining;
- memcpy ((char *) bufferList->mBuffers[0].mData + offset,
+ memcpy ((char *) bufferList->mBuffers[stream_idx].mData + offset,
readptr + buf->segoffset, len);
buf->segoffset += len;
@@ -344,34 +506,220 @@
kAudioUnitScope_Global, 0, (float) sink->volume, 0);
}
-static void
+static inline void
+_dump_channel_layout (AudioChannelLayout * channel_layout)
+{
+ UInt32 i;
+
+ GST_DEBUG ("mChannelLayoutTag: 0x%lx",
+ (unsigned long) channel_layout->mChannelLayoutTag);
+ GST_DEBUG ("mChannelBitmap: 0x%lx",
+ (unsigned long) channel_layout->mChannelBitmap);
+ GST_DEBUG ("mNumberChannelDescriptions: %lu",
+ (unsigned long) channel_layout->mNumberChannelDescriptions);
+ for (i = 0; i < channel_layout->mNumberChannelDescriptions; i++) {
+ AudioChannelDescription *channel_desc =
+ &channel_layout->mChannelDescriptions[i];
+ GST_DEBUG (" mChannelLabel: 0x%lx mChannelFlags: 0x%lx "
+ "mCoordinates[0]: %f mCoordinates[1]: %f "
+ "mCoordinates[2]: %f",
+ (unsigned long) channel_desc->mChannelLabel,
+ (unsigned long) channel_desc->mChannelFlags,
+ channel_desc->mCoordinates[0], channel_desc->mCoordinates[1],
+ channel_desc->mCoordinates[2]);
+ }
+}
+
+static gboolean
+gst_osx_audio_sink_allowed_caps (GstOsxAudioSink * osxsink)
+{
+ gint i, max_channels = 0;
+ gboolean spdif_allowed, use_positions = FALSE;
+ AudioChannelLayout *layout;
+ GstElementClass *element_class;
+ GstPadTemplate *pad_template;
+ GstCaps *caps, *in_caps;
+
+ GstAudioChannelPosition pos[9] = {
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID,
+ GST_AUDIO_CHANNEL_POSITION_INVALID
+ };
+
+ /* First collect info about the HW capabilites and preferences */
+ spdif_allowed = _audio_device_is_spdif_avail (osxsink->device_id);
+ layout = _audio_device_get_channel_layout (osxsink->device_id);
+
+ GST_DEBUG_OBJECT (osxsink, "Selected device ID: %u SPDIF allowed: %d",
+ (unsigned) osxsink->device_id, spdif_allowed);
+
+ if (layout) {
+ _dump_channel_layout (layout);
+ max_channels = layout->mNumberChannelDescriptions;
+ } else {
+ GST_WARNING_OBJECT (osxsink, "This driver does not support "
+ "kAudioDevicePropertyPreferredChannelLayout.");
+ max_channels = 2;
+ }
+
+ if (max_channels > 2) {
+ max_channels = MIN (max_channels, 9);
+ use_positions = TRUE;
+ for (i = 0; i < max_channels; i++) {
+ switch (layout->mChannelDescriptions[i].mChannelLabel) {
+ case kAudioChannelLabel_Left:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ break;
+ case kAudioChannelLabel_Right:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ break;
+ case kAudioChannelLabel_Center:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+ break;
+ case kAudioChannelLabel_LFEScreen:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_LFE;
+ break;
+ case kAudioChannelLabel_LeftSurround:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+ break;
+ case kAudioChannelLabel_RightSurround:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+ break;
+ case kAudioChannelLabel_RearSurroundLeft:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT;
+ break;
+ case kAudioChannelLabel_RearSurroundRight:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT;
+ break;
+ case kAudioChannelLabel_CenterSurround:
+ pos[i] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+ break;
+ default:
+ GST_WARNING_OBJECT (osxsink, "unrecognized channel: %d",
+ (int) layout->mChannelDescriptions[i].mChannelLabel);
+ use_positions = FALSE;
+ max_channels = 2;
+ break;
+ }
+ }
+ }
+ g_free (layout);
+
+ /* Recover the template caps */
+ element_class = GST_ELEMENT_GET_CLASS (osxsink);
+ pad_template = gst_element_class_get_pad_template (element_class, "sink");
+ in_caps = gst_pad_template_get_caps (pad_template);
+
+ /* Create the allowed subset */
+ caps = gst_caps_new_empty ();
+ for (i = 0; i < gst_caps_get_size (in_caps); i++) {
+ GstStructure *in_s, *out_s;
+
+ in_s = gst_caps_get_structure (in_caps, i);
+
+ if (gst_structure_has_name (in_s, "audio/x-ac3") ||
+ gst_structure_has_name (in_s, "audio/x-dts")) {
+ if (spdif_allowed) {
+ gst_caps_append_structure (caps, gst_structure_copy (in_s));
+ }
+ } else {
+ if (max_channels > 2 && use_positions) {
+ out_s = gst_structure_copy (in_s);
+ gst_structure_remove_field (out_s, "channels");
+ gst_structure_set (out_s, "channels", G_TYPE_INT, max_channels, NULL);
+ gst_audio_set_channel_positions (out_s, pos);
+ gst_caps_append_structure (caps, out_s);
+ }
+ out_s = gst_structure_copy (in_s);
+ gst_structure_remove_field (out_s, "channels");
+ gst_structure_set (out_s, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
+ gst_caps_append_structure (caps, out_s);
+ }
+ }
+
+ if (osxsink->cached_caps) {
+ gst_caps_unref (osxsink->cached_caps);
+ }
+
+ osxsink->cached_caps = caps;
+
+ return TRUE;
+}
+
+static gboolean
gst_osx_audio_sink_select_device (GstOsxAudioSink * osxsink)
{
- OSStatus status;
- UInt32 propertySize;
+ AudioDeviceID *devices = NULL;
+ AudioDeviceID default_device_id = 0;
+ AudioChannelLayout *channel_layout;
+ gint i, ndevices = 0;
+ gboolean res = FALSE;
- if (osxsink->device_id == kAudioDeviceUnknown) {
- /* If no specific device has been selected by the user, then pick the
- * default device */
- GST_DEBUG_OBJECT (osxsink, "Selecting device for OSXAudioSink");
- propertySize = sizeof (osxsink->device_id);
- status =
- AudioHardwareGetProperty (kAudioHardwarePropertyDefaultOutputDevice,
- &propertySize, &osxsink->device_id);
+ devices = _audio_system_get_devices (&ndevices);
- if (status) {
- GST_WARNING_OBJECT (osxsink,
- "AudioHardwareGetProperty returned %d", (int) status);
- } else {
- GST_DEBUG_OBJECT (osxsink, "AudioHardwareGetProperty returned 0");
- }
-
- if (osxsink->device_id == kAudioDeviceUnknown) {
- GST_WARNING_OBJECT (osxsink,
- "AudioHardwareGetProperty: device_id is kAudioDeviceUnknown");
- }
-
- GST_DEBUG_OBJECT (osxsink, "AudioHardwareGetProperty: device_id is %lu",
- (long) osxsink->device_id);
+ if (ndevices < 1) {
+ GST_ERROR_OBJECT (osxsink, "no audio output devices found");
+ goto done;
}
+
+ GST_DEBUG_OBJECT (osxsink, "found %d audio device(s)", ndevices);
+
+ for (i = 0; i < ndevices; i++) {
+ gchar *device_name;
+
+ if ((device_name = _audio_device_get_name (devices[i]))) {
+ if (!_audio_device_has_output (devices[i])) {
+ GST_DEBUG_OBJECT (osxsink, "Input Device ID: %u Name: %s",
+ (unsigned) devices[i], device_name);
+ } else {
+ GST_DEBUG_OBJECT (osxsink, "Output Device ID: %u Name: %s",
+ (unsigned) devices[i], device_name);
+
+ channel_layout = _audio_device_get_channel_layout (devices[i]);
+ if (channel_layout) {
+ _dump_channel_layout (channel_layout);
+ g_free (channel_layout);
+ }
+ }
+
+ g_free (device_name);
+ }
+ }
+
+ /* Find the ID of the default output device */
+ default_device_id = _audio_system_get_default_output ();
+
+ /* Here we decide if selected device is valid or autoselect
+ * the default one when required */
+ if (osxsink->device_id == kAudioDeviceUnknown) {
+ if (default_device_id != kAudioDeviceUnknown) {
+ osxsink->device_id = default_device_id;
+ res = TRUE;
+ }
+ } else {
+ for (i = 0; i < ndevices; i++) {
+ if (osxsink->device_id == devices[i]) {
+ res = TRUE;
+ }
+ }
+
+ if (res && !_audio_device_is_alive (osxsink->device_id)) {
+ GST_ERROR_OBJECT (osxsink, "Requested device not usable");
+ res = FALSE;
+ goto done;
+ }
+ }
+
+ res = gst_osx_audio_sink_allowed_caps (osxsink);
+
+done:
+ g_free (devices);
+
+ return res;
}
diff --git a/sys/osxaudio/gstosxaudiosink.h b/sys/osxaudio/gstosxaudiosink.h
index aac9719..e3aaec3 100644
--- a/sys/osxaudio/gstosxaudiosink.h
+++ b/sys/osxaudio/gstosxaudiosink.h
@@ -2,6 +2,7 @@
* GStreamer
* Copyright (C) 2005-2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* Copyright (C) 2007 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -70,11 +71,13 @@
GstBaseAudioSink sink;
AudioDeviceID device_id;
+
AudioUnit audiounit;
double volume;
+ GstCaps *cached_caps;
};
-struct _GstOsxAudioSinkClass
+struct _GstOsxAudioSinkClass
{
GstBaseAudioSinkClass parent_class;
};
@@ -84,3 +87,4 @@
G_END_DECLS
#endif /* __GST_OSXAUDIOSINK_H__ */
+
diff --git a/sys/osxaudio/gstosxcoreaudio.h b/sys/osxaudio/gstosxcoreaudio.h
new file mode 100644
index 0000000..8876115
--- /dev/null
+++ b/sys/osxaudio/gstosxcoreaudio.h
@@ -0,0 +1,606 @@
+/*
+ * GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The development of this code was made possible due to the involvement of
+ * Pioneers of the Inevitable, the creators of the Songbird Music player
+ *
+ */
+
+#define CORE_AUDIO_FORMAT "FormatID: %" GST_FOURCC_FORMAT " rate: %f flags: 0x%x BytesPerPacket: %u FramesPerPacket: %u BytesPerFrame: %u ChannelsPerFrame: %u BitsPerChannel: %u"
+#define CORE_AUDIO_FORMAT_ARGS(f) GST_FOURCC_ARGS((f).mFormatID),(f).mSampleRate,(unsigned)(f).mFormatFlags,(unsigned)(f).mBytesPerPacket,(unsigned)(f).mFramesPerPacket,(unsigned)(f).mBytesPerFrame,(unsigned)(f).mChannelsPerFrame,(unsigned)(f).mBitsPerChannel
+
+#define CORE_AUDIO_FORMAT_IS_SPDIF(f) ((f).mFormat.mFormatID == 'IAC3' || (f).mFormat.mFormatID == 'iac3' || (f).mFormat.mFormatID == kAudioFormat60958AC3 || (f).mFormat.mFormatID == kAudioFormatAC3)
+
+static inline gboolean
+_audio_system_set_runloop (CFRunLoopRef runLoop)
+{
+ OSStatus status = noErr;
+
+ gboolean res = FALSE;
+
+ AudioObjectPropertyAddress runloopAddress = {
+ kAudioHardwarePropertyRunLoop,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectSetPropertyData (kAudioObjectSystemObject,
+ &runloopAddress, 0, NULL, sizeof (CFRunLoopRef), &runLoop);
+ if (status == noErr) {
+ res = TRUE;
+ } else {
+ GST_ERROR ("failed to set runloop to %p: %" GST_FOURCC_FORMAT,
+ runLoop, GST_FOURCC_ARGS (status));
+ }
+
+ return res;
+}
+
+static inline AudioDeviceID
+_audio_system_get_default_output (void)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = sizeof (AudioDeviceID);
+ AudioDeviceID device_id = kAudioDeviceUnknown;
+
+ AudioObjectPropertyAddress defaultDeviceAddress = {
+ kAudioHardwarePropertyDefaultOutputDevice,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyData (kAudioObjectSystemObject,
+ &defaultDeviceAddress, 0, NULL, &propertySize, &device_id);
+ if (status != noErr) {
+ GST_ERROR ("failed getting default output device: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ }
+
+ return device_id;
+}
+
+static inline AudioDeviceID *
+_audio_system_get_devices (gint * ndevices)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = 0;
+ AudioDeviceID *devices = NULL;
+
+ AudioObjectPropertyAddress audioDevicesAddress = {
+ kAudioHardwarePropertyDevices,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyDataSize (kAudioObjectSystemObject,
+ &audioDevicesAddress, 0, NULL, &propertySize);
+ if (status != noErr) {
+ GST_WARNING ("failed getting number of devices: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return NULL;
+ }
+
+ *ndevices = propertySize / sizeof (AudioDeviceID);
+
+ devices = (AudioDeviceID *) g_malloc (propertySize);
+ if (devices) {
+ status = AudioObjectGetPropertyData (kAudioObjectSystemObject,
+ &audioDevicesAddress, 0, NULL, &propertySize, devices);
+ if (status != noErr) {
+ GST_WARNING ("failed getting the list of devices: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ g_free (devices);
+ *ndevices = 0;
+ return NULL;
+ }
+ }
+ return devices;
+}
+
+static inline gboolean
+_audio_device_is_alive (AudioDeviceID device_id)
+{
+ OSStatus status = noErr;
+ int alive = FALSE;
+ UInt32 propertySize = sizeof (alive);
+
+ AudioObjectPropertyAddress audioDeviceAliveAddress = {
+ kAudioDevicePropertyDeviceIsAlive,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyData (device_id,
+ &audioDeviceAliveAddress, 0, NULL, &propertySize, &alive);
+ if (status != noErr) {
+ alive = FALSE;
+ }
+
+ return alive;
+}
+
+static inline guint
+_audio_device_get_latency (AudioDeviceID device_id)
+{
+ OSStatus status = noErr;
+ UInt32 latency = 0;
+ UInt32 propertySize = sizeof (latency);
+
+ AudioObjectPropertyAddress audioDeviceLatencyAddress = {
+ kAudioDevicePropertyLatency,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyData (device_id,
+ &audioDeviceLatencyAddress, 0, NULL, &propertySize, &latency);
+ if (status != noErr) {
+ GST_ERROR ("failed to get latency: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ latency = -1;
+ }
+
+ return latency;
+}
+
+static inline pid_t
+_audio_device_get_hog (AudioDeviceID device_id)
+{
+ OSStatus status = noErr;
+ pid_t hog_pid;
+ UInt32 propertySize = sizeof (hog_pid);
+
+ AudioObjectPropertyAddress audioDeviceHogModeAddress = {
+ kAudioDevicePropertyHogMode,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyData (device_id,
+ &audioDeviceHogModeAddress, 0, NULL, &propertySize, &hog_pid);
+ if (status != noErr) {
+ GST_ERROR ("failed to get hog: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ hog_pid = -1;
+ }
+
+ return hog_pid;
+}
+
+static inline gboolean
+_audio_device_set_hog (AudioDeviceID device_id, pid_t hog_pid)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = sizeof (hog_pid);
+ gboolean res = FALSE;
+
+ AudioObjectPropertyAddress audioDeviceHogModeAddress = {
+ kAudioDevicePropertyHogMode,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectSetPropertyData (device_id,
+ &audioDeviceHogModeAddress, 0, NULL, propertySize, &hog_pid);
+
+ if (status == noErr) {
+ res = TRUE;
+ } else {
+ GST_ERROR ("failed to set hog: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+
+ return res;
+}
+
+static inline gboolean
+_audio_device_set_mixing (AudioDeviceID device_id, gboolean enable_mix)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = 0, can_mix = enable_mix;
+ Boolean writable = FALSE;
+ gboolean res = FALSE;
+
+ AudioObjectPropertyAddress audioDeviceSupportsMixingAddress = {
+ kAudioDevicePropertySupportsMixing,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ if (AudioObjectHasProperty (device_id, &audioDeviceSupportsMixingAddress)) {
+ /* Set mixable to false if we are allowed to */
+ status = AudioObjectIsPropertySettable (device_id,
+ &audioDeviceSupportsMixingAddress, &writable);
+ if (status) {
+ GST_DEBUG ("AudioObjectIsPropertySettable: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+ status = AudioObjectGetPropertyDataSize (device_id,
+ &audioDeviceSupportsMixingAddress, 0, NULL, &propertySize);
+ if (status) {
+ GST_DEBUG ("AudioObjectGetPropertyDataSize: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+ status = AudioObjectGetPropertyData (device_id,
+ &audioDeviceSupportsMixingAddress, 0, NULL, &propertySize, &can_mix);
+ if (status) {
+ GST_DEBUG ("AudioObjectGetPropertyData: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+
+ if (status == noErr && writable) {
+ can_mix = enable_mix;
+ status = AudioObjectSetPropertyData (device_id,
+ &audioDeviceSupportsMixingAddress, 0, NULL, propertySize, &can_mix);
+ res = TRUE;
+ }
+
+ if (status != noErr) {
+ GST_ERROR ("failed to set mixmode: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+ } else {
+ GST_DEBUG ("property not found, mixing coudln't be changed");
+ }
+
+ return res;
+}
+
+static inline gchar *
+_audio_device_get_name (AudioDeviceID device_id)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = 0;
+ gchar *device_name = NULL;
+
+ AudioObjectPropertyAddress deviceNameAddress = {
+ kAudioDevicePropertyDeviceName,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ /* Get the length of the device name */
+ status = AudioObjectGetPropertyDataSize (device_id,
+ &deviceNameAddress, 0, NULL, &propertySize);
+ if (status != noErr) {
+ goto beach;
+ }
+
+ /* Get the name of the device */
+ device_name = (gchar *) g_malloc (propertySize);
+ status = AudioObjectGetPropertyData (device_id,
+ &deviceNameAddress, 0, NULL, &propertySize, device_name);
+ if (status != noErr) {
+ g_free (device_name);
+ device_name = NULL;
+ }
+
+beach:
+ return device_name;
+}
+
+static inline gboolean
+_audio_device_has_output (AudioDeviceID device_id)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize;
+
+ AudioObjectPropertyAddress streamsAddress = {
+ kAudioDevicePropertyStreams,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyDataSize (device_id,
+ &streamsAddress, 0, NULL, &propertySize);
+ if (status != noErr) {
+ return FALSE;
+ }
+ if (propertySize == 0) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static inline AudioChannelLayout *
+_audio_device_get_channel_layout (AudioDeviceID device_id)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = 0;
+ AudioChannelLayout *layout = NULL;
+
+ AudioObjectPropertyAddress channelLayoutAddress = {
+ kAudioDevicePropertyPreferredChannelLayout,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ /* Get the length of the default channel layout structure */
+ status = AudioObjectGetPropertyDataSize (device_id,
+ &channelLayoutAddress, 0, NULL, &propertySize);
+ if (status != noErr) {
+ GST_ERROR ("failed to get prefered layout: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ goto beach;
+ }
+
+ /* Get the default channel layout of the device */
+ layout = (AudioChannelLayout *) g_malloc (propertySize);
+ status = AudioObjectGetPropertyData (device_id,
+ &channelLayoutAddress, 0, NULL, &propertySize, layout);
+ if (status != noErr) {
+ GST_ERROR ("failed to get prefered layout: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ goto failed;
+ }
+
+ if (layout->mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap) {
+ /* bitmap defined channellayout */
+ status =
+ AudioFormatGetProperty (kAudioFormatProperty_ChannelLayoutForBitmap,
+ sizeof (UInt32), &layout->mChannelBitmap, &propertySize, layout);
+ if (status != noErr) {
+ GST_ERROR ("failed to get layout for bitmap: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ goto failed;
+ }
+ } else if (layout->mChannelLayoutTag !=
+ kAudioChannelLayoutTag_UseChannelDescriptions) {
+ /* layouttags defined channellayout */
+ status = AudioFormatGetProperty (kAudioFormatProperty_ChannelLayoutForTag,
+ sizeof(AudioChannelLayoutTag), &layout->mChannelLayoutTag,
+ &propertySize, layout);
+ if (status != noErr) {
+ GST_ERROR ("failed to get layout for tag: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ goto failed;
+ }
+ }
+
+beach:
+ return layout;
+
+failed:
+ g_free (layout);
+ return NULL;
+}
+
+static inline AudioStreamID *
+_audio_device_get_streams (AudioDeviceID device_id, gint * nstreams)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = 0;
+ AudioStreamID *streams = NULL;
+
+ AudioObjectPropertyAddress streamsAddress = {
+ kAudioDevicePropertyStreams,
+ kAudioDevicePropertyScopeOutput,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyDataSize (device_id,
+ &streamsAddress, 0, NULL, &propertySize);
+ if (status != noErr) {
+ GST_WARNING ("failed getting number of streams: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return NULL;
+ }
+
+ *nstreams = propertySize / sizeof (AudioStreamID);
+ streams = (AudioStreamID *) g_malloc (propertySize);
+
+ if (streams) {
+ status = AudioObjectGetPropertyData (device_id,
+ &streamsAddress, 0, NULL, &propertySize, streams);
+ if (status != noErr) {
+ GST_WARNING ("failed getting the list of streams: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ g_free (streams);
+ *nstreams = 0;
+ return NULL;
+ }
+ }
+
+ return streams;
+}
+
+static inline guint
+_audio_stream_get_latency (AudioStreamID stream_id)
+{
+ OSStatus status = noErr;
+ UInt32 latency;
+ UInt32 propertySize = sizeof (latency);
+
+ AudioObjectPropertyAddress latencyAddress = {
+ kAudioStreamPropertyLatency,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyData (stream_id,
+ &latencyAddress, 0, NULL, &propertySize, &latency);
+ if (status != noErr) {
+ GST_ERROR ("failed to get latency: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ latency = -1;
+ }
+
+ return latency;
+}
+
+static inline gboolean
+_audio_stream_get_current_format (AudioStreamID stream_id,
+ AudioStreamBasicDescription * format)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = sizeof (AudioStreamBasicDescription);
+
+ AudioObjectPropertyAddress formatAddress = {
+ kAudioStreamPropertyPhysicalFormat,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyData (stream_id,
+ &formatAddress, 0, NULL, &propertySize, format);
+ if (status != noErr) {
+ GST_ERROR ("failed to get current format: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static inline gboolean
+_audio_stream_set_current_format (AudioStreamID stream_id,
+ AudioStreamBasicDescription format)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = sizeof (AudioStreamBasicDescription);
+
+ AudioObjectPropertyAddress formatAddress = {
+ kAudioStreamPropertyPhysicalFormat,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectSetPropertyData (stream_id,
+ &formatAddress, 0, NULL, propertySize, &format);
+ if (status != noErr) {
+ GST_ERROR ("failed to set current format: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static inline AudioStreamRangedDescription *
+_audio_stream_get_formats (AudioStreamID stream_id, gint * nformats)
+{
+ OSStatus status = noErr;
+ UInt32 propertySize = 0;
+ AudioStreamRangedDescription *formats = NULL;
+
+ AudioObjectPropertyAddress formatsAddress = {
+ kAudioStreamPropertyAvailablePhysicalFormats,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ status = AudioObjectGetPropertyDataSize (stream_id,
+ &formatsAddress, 0, NULL, &propertySize);
+ if (status != noErr) {
+ GST_WARNING ("failed getting number of stream formats: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return NULL;
+ }
+
+ *nformats = propertySize / sizeof (AudioStreamRangedDescription);
+
+ formats = (AudioStreamRangedDescription *) g_malloc (propertySize);
+ if (formats) {
+ status = AudioObjectGetPropertyData (stream_id,
+ &formatsAddress, 0, NULL, &propertySize, formats);
+ if (status != noErr) {
+ GST_WARNING ("failed getting the list of stream formats: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ g_free (formats);
+ *nformats = 0;
+ return NULL;
+ }
+ }
+ return formats;
+}
+
+static inline gboolean
+_audio_stream_is_spdif_avail (AudioStreamID stream_id)
+{
+ AudioStreamRangedDescription *formats;
+ gint i, nformats = 0;
+ gboolean res = FALSE;
+
+ formats = _audio_stream_get_formats (stream_id, &nformats);
+ GST_DEBUG ("found %d stream formats", nformats);
+
+ if (formats) {
+ GST_DEBUG ("formats supported on stream ID: %u",
+ (unsigned) stream_id);
+
+ for (i = 0; i < nformats; i++) {
+ GST_DEBUG (" " CORE_AUDIO_FORMAT,
+ CORE_AUDIO_FORMAT_ARGS (formats[i].mFormat));
+
+ if (CORE_AUDIO_FORMAT_IS_SPDIF (formats[i])) {
+ res = TRUE;
+ }
+ }
+ g_free (formats);
+ }
+
+ return res;
+}
+
+static inline gboolean
+_audio_device_is_spdif_avail (AudioDeviceID device_id)
+{
+ AudioStreamID *streams = NULL;
+ gint i, nstreams = 0;
+ gboolean res = FALSE;
+
+ streams = _audio_device_get_streams (device_id, &nstreams);
+ GST_DEBUG ("found %d streams", nstreams);
+ if (streams) {
+ for (i = 0; i < nstreams; i++) {
+ if (_audio_stream_is_spdif_avail (streams[i])) {
+ res = TRUE;
+ }
+ }
+
+ g_free (streams);
+ }
+
+ return res;
+}
+
diff --git a/sys/osxaudio/gstosxringbuffer.c b/sys/osxaudio/gstosxringbuffer.c
index cb77162..f43a055 100644
--- a/sys/osxaudio/gstosxringbuffer.c
+++ b/sys/osxaudio/gstosxringbuffer.c
@@ -2,6 +2,7 @@
* GStreamer
* Copyright (C) 2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
* Copyright (C) 2008 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -50,9 +51,13 @@
#include "gstosxaudiosink.h"
#include "gstosxaudiosrc.h"
+#include <unistd.h> /* for getpid() */
+
GST_DEBUG_CATEGORY_STATIC (osx_audio_debug);
#define GST_CAT_DEFAULT osx_audio_debug
+#include "gstosxcoreaudio.h"
+
static void gst_osx_ring_buffer_dispose (GObject * object);
static void gst_osx_ring_buffer_finalize (GObject * object);
static gboolean gst_osx_ring_buffer_open_device (GstRingBuffer * buf);
@@ -68,13 +73,8 @@
static guint gst_osx_ring_buffer_delay (GstRingBuffer * buf);
static GstRingBufferClass *ring_parent_class = NULL;
-static OSStatus gst_osx_ring_buffer_render_notify (GstOsxRingBuffer * osxbuf,
- AudioUnitRenderActionFlags * ioActionFlags,
- const AudioTimeStamp * inTimeStamp, unsigned int inBusNumber,
- unsigned int inNumberFrames, AudioBufferList * ioData);
-
-static AudioBufferList *buffer_list_alloc (int channels, int size);
-static void buffer_list_free (AudioBufferList * list);
+static void gst_osx_ring_buffer_remove_render_callback (GstOsxRingBuffer *
+ osxbuf);
static void
gst_osx_ring_buffer_do_init (GType type)
@@ -83,8 +83,8 @@
"OSX Audio Elements");
}
-GST_BOILERPLATE_FULL (GstOsxRingBuffer, gst_osx_ring_buffer, GstRingBuffer,
- GST_TYPE_RING_BUFFER, gst_osx_ring_buffer_do_init);
+GST_BOILERPLATE_FULL (GstOsxRingBuffer, gst_osx_ring_buffer,
+ GstRingBuffer, GST_TYPE_RING_BUFFER, gst_osx_ring_buffer_do_init);
static void
gst_osx_ring_buffer_base_init (gpointer g_class)
@@ -131,6 +131,9 @@
GstOsxRingBufferClass * g_class)
{
/* Nothing to do right now */
+ ringbuffer->is_passthrough = FALSE;
+ ringbuffer->hog_pid = -1;
+ ringbuffer->disabled_mixing = FALSE;
}
static void
@@ -154,15 +157,18 @@
OSStatus status;
AudioUnit unit;
UInt32 enableIO;
+ AudioStreamBasicDescription asbd_in;
+ UInt32 propertySize;
/* Create a HALOutput AudioUnit.
- * This is the lowest-level output API that is actually sensibly usable
- * (the lower level ones require that you do channel-remapping yourself,
- * and the CoreAudio channel mapping is sufficiently complex that doing
- * so would be very difficult)
+ * This is the lowest-level output API that is actually sensibly
+ * usable (the lower level ones require that you do
+ * channel-remapping yourself, and the CoreAudio channel mapping
+ * is sufficiently complex that doing so would be very difficult)
*
- * Note that for input we request an output unit even though we will do
- * input with it: http://developer.apple.com/technotes/tn2002/tn2091.html
+ * Note that for input we request an output unit even though
+ * we will do input with it.
+ * http://developer.apple.com/technotes/tn2002/tn2091.html
*/
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_HALOutput;
@@ -179,7 +185,8 @@
status = OpenAComponent (comp, &unit);
if (status) {
- GST_WARNING_OBJECT (osxbuf, "Couldn't open HALOutput component");
+ GST_ERROR_OBJECT (osxbuf, "Couldn't open HALOutput component %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
return NULL;
}
@@ -191,8 +198,8 @@
if (status) {
CloseComponent (unit);
- GST_WARNING_OBJECT (osxbuf, "Failed to enable input: %lx",
- (gulong) status);
+ GST_WARNING_OBJECT (osxbuf, "Failed to enable input: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
return NULL;
}
@@ -203,25 +210,38 @@
if (status) {
CloseComponent (unit);
- GST_WARNING_OBJECT (osxbuf, "Failed to disable output: %lx",
- (gulong) status);
+ GST_WARNING_OBJECT (osxbuf, "Failed to disable output: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
return NULL;
}
}
- /* Specify which device we're using. */
- GST_DEBUG_OBJECT (osxbuf, "Setting device to %d", (int) device_id);
- status = AudioUnitSetProperty (unit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, /* N/A for global */
- &device_id, sizeof (AudioDeviceID));
+ GST_DEBUG_OBJECT (osxbuf, "Created HALOutput AudioUnit: %p", unit);
- if (status) {
- CloseComponent (unit);
- GST_WARNING_OBJECT (osxbuf, "Failed to set device: %lx", (gulong) status);
- return NULL;
+ if (input) {
+ GstOsxAudioSrc *src = GST_OSX_AUDIO_SRC (GST_OBJECT_PARENT (osxbuf));
+
+ propertySize = sizeof (asbd_in);
+ status = AudioUnitGetProperty (unit,
+ kAudioUnitProperty_StreamFormat,
+ kAudioUnitScope_Input, 1, &asbd_in, &propertySize);
+
+ if (status) {
+ CloseComponent (unit);
+ GST_WARNING_OBJECT (osxbuf,
+ "Unable to obtain device properties: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ return NULL;
+ }
+
+ src->deviceChannels = asbd_in.mChannelsPerFrame;
+ } else {
+ GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (GST_OBJECT_PARENT (osxbuf));
+
+ /* needed for the sink's volume control */
+ sink->audiounit = unit;
}
- GST_DEBUG_OBJECT (osxbuf, "Create HALOutput AudioUnit: %p", unit);
-
return unit;
}
@@ -229,41 +249,18 @@
gst_osx_ring_buffer_open_device (GstRingBuffer * buf)
{
GstOsxRingBuffer *osxbuf;
- GstOsxAudioSink *sink;
- GstOsxAudioSrc *src;
- AudioStreamBasicDescription asbd_in;
- OSStatus status;
- UInt32 propertySize;
osxbuf = GST_OSX_RING_BUFFER (buf);
- sink = NULL;
- src = NULL;
+
+ /* The following is needed to instruct HAL to create their own
+ * thread to handle the notifications. */
+ _audio_system_set_runloop (NULL);
osxbuf->audiounit = gst_osx_ring_buffer_create_audio_unit (osxbuf,
osxbuf->is_src, osxbuf->device_id);
- if (osxbuf->is_src) {
- src = GST_OSX_AUDIO_SRC (GST_OBJECT_PARENT (buf));
-
- propertySize = sizeof (asbd_in);
- status = AudioUnitGetProperty (osxbuf->audiounit,
- kAudioUnitProperty_StreamFormat,
- kAudioUnitScope_Input, 1, &asbd_in, &propertySize);
-
- if (status) {
- CloseComponent (osxbuf->audiounit);
- osxbuf->audiounit = NULL;
- GST_WARNING_OBJECT (osxbuf, "Unable to obtain device properties: %lx",
- (gulong) status);
- return FALSE;
- }
-
- src->deviceChannels = asbd_in.mChannelsPerFrame;
- } else {
- sink = GST_OSX_AUDIO_SINK (GST_OBJECT_PARENT (buf));
-
- /* needed for the sink's volume control */
- sink->audiounit = osxbuf->audiounit;
+ if (!osxbuf->audiounit) {
+ return FALSE;
}
return TRUE;
@@ -317,360 +314,6 @@
}
}
-static gboolean
-gst_osx_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
-{
- /* Configure the output stream and allocate ringbuffer memory */
- GstOsxRingBuffer *osxbuf;
- AudioStreamBasicDescription format;
- AudioChannelLayout *layout = NULL;
- OSStatus status;
- UInt32 propertySize;
- int layoutSize;
- int element;
- int i;
- int width, depth;
- AudioUnitScope scope;
- gboolean ret = FALSE;
- GstStructure *structure;
- GstAudioChannelPosition *positions;
- UInt32 frameSize;
-
- osxbuf = GST_OSX_RING_BUFFER (buf);
-
- /* Fill out the audio description we're going to be using */
- format.mFormatID = kAudioFormatLinearPCM;
- format.mSampleRate = (double) spec->rate;
- format.mChannelsPerFrame = spec->channels;
- if (spec->type == GST_BUFTYPE_FLOAT) {
- format.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
- width = depth = spec->width;
- } else {
- format.mFormatFlags = kAudioFormatFlagIsSignedInteger;
- width = spec->width;
- depth = spec->depth;
- if (width == depth) {
- format.mFormatFlags |= kAudioFormatFlagIsPacked;
- } else {
- format.mFormatFlags |= kAudioFormatFlagIsAlignedHigh;
- }
- if (spec->bigend) {
- format.mFormatFlags |= kAudioFormatFlagIsBigEndian;
- }
- }
- format.mBytesPerFrame = spec->channels * (width >> 3);
- format.mBitsPerChannel = depth;
- format.mBytesPerPacket = spec->channels * (width >> 3);
- format.mFramesPerPacket = 1;
- format.mReserved = 0;
-
- /* Describe channels */
- layoutSize = sizeof (AudioChannelLayout) +
- spec->channels * sizeof (AudioChannelDescription);
- layout = g_malloc (layoutSize);
-
- structure = gst_caps_get_structure (spec->caps, 0);
- positions = gst_audio_get_channel_positions (structure);
-
- layout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
- layout->mChannelBitmap = 0; /* Not used */
- layout->mNumberChannelDescriptions = spec->channels;
- for (i = 0; i < spec->channels; i++) {
- if (positions) {
- layout->mChannelDescriptions[i].mChannelLabel =
- gst_audio_channel_position_to_coreaudio_channel_label (positions[i],
- i);
- } else {
- /* Discrete channel numbers are ORed into this */
- layout->mChannelDescriptions[i].mChannelLabel =
- kAudioChannelLabel_Discrete_0 | i;
- }
-
- /* Others unused */
- layout->mChannelDescriptions[i].mChannelFlags = 0;
- layout->mChannelDescriptions[i].mCoordinates[0] = 0.f;
- layout->mChannelDescriptions[i].mCoordinates[1] = 0.f;
- layout->mChannelDescriptions[i].mCoordinates[2] = 0.f;
- }
-
- if (positions) {
- g_free (positions);
- positions = NULL;
- }
-
- GST_LOG_OBJECT (osxbuf, "Format: %x, %f, %u, %x, %d, %d, %d, %d, %d",
- (unsigned int) format.mFormatID,
- format.mSampleRate,
- (unsigned int) format.mChannelsPerFrame,
- (unsigned int) format.mFormatFlags,
- (unsigned int) format.mBytesPerFrame,
- (unsigned int) format.mBitsPerChannel,
- (unsigned int) format.mBytesPerPacket,
- (unsigned int) format.mFramesPerPacket, (unsigned int) format.mReserved);
-
- GST_DEBUG_OBJECT (osxbuf, "Setting format for AudioUnit");
-
- scope = osxbuf->is_src ? kAudioUnitScope_Output : kAudioUnitScope_Input;
- element = osxbuf->is_src ? 1 : 0;
-
- propertySize = sizeof (format);
- status = AudioUnitSetProperty (osxbuf->audiounit,
- kAudioUnitProperty_StreamFormat, scope, element, &format, propertySize);
-
- if (status) {
- GST_WARNING_OBJECT (osxbuf, "Failed to set audio description: %lx",
- (gulong) status);
- goto done;
- }
-
- status = AudioUnitSetProperty (osxbuf->audiounit,
- kAudioUnitProperty_AudioChannelLayout,
- scope, element, layout, layoutSize);
- if (status) {
- GST_WARNING_OBJECT (osxbuf, "Failed to set output channel layout: %lx",
- (gulong) status);
- goto done;
- }
-
- spec->segsize =
- (spec->latency_time * spec->rate / G_USEC_PER_SEC) *
- spec->bytes_per_sample;
- spec->segtotal = spec->buffer_time / spec->latency_time;
-
- /* create AudioBufferList needed for recording */
- if (osxbuf->is_src) {
- propertySize = sizeof (frameSize);
- status = AudioUnitGetProperty (osxbuf->audiounit, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, 0, /* N/A for global */
- &frameSize, &propertySize);
-
- if (status) {
- GST_WARNING_OBJECT (osxbuf, "Failed to get frame size: %lx",
- (gulong) status);
- goto done;
- }
-
- osxbuf->recBufferList = buffer_list_alloc (format.mChannelsPerFrame,
- frameSize * format.mBytesPerFrame);
- }
-
- buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
- memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
-
- osxbuf->segoffset = 0;
-
- status = AudioUnitInitialize (osxbuf->audiounit);
- if (status) {
- gst_buffer_unref (buf->data);
- buf->data = NULL;
-
- if (osxbuf->recBufferList) {
- buffer_list_free (osxbuf->recBufferList);
- osxbuf->recBufferList = NULL;
- }
-
- GST_WARNING_OBJECT (osxbuf,
- "Failed to initialise AudioUnit: %d", (int) status);
- goto done;
- }
-
- GST_DEBUG_OBJECT (osxbuf, "osx ring buffer acquired");
-
- ret = TRUE;
-
-done:
- g_free (layout);
- return ret;
-}
-
-static gboolean
-gst_osx_ring_buffer_release (GstRingBuffer * buf)
-{
- GstOsxRingBuffer *osxbuf;
-
- osxbuf = GST_OSX_RING_BUFFER (buf);
-
- AudioUnitUninitialize (osxbuf->audiounit);
-
- gst_buffer_unref (buf->data);
- buf->data = NULL;
-
- if (osxbuf->recBufferList) {
- buffer_list_free (osxbuf->recBufferList);
- osxbuf->recBufferList = NULL;
- }
-
- return TRUE;
-}
-
-static void
-gst_osx_ring_buffer_remove_render_callback (GstOsxRingBuffer * osxbuf)
-{
- AURenderCallbackStruct input;
- OSStatus status;
-
- /* Deactivate the render callback by calling SetRenderCallback with a NULL
- * inputProc.
- */
- input.inputProc = NULL;
- input.inputProcRefCon = NULL;
-
- status = AudioUnitSetProperty (osxbuf->audiounit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0, /* N/A for global */
- &input, sizeof (input));
-
- if (status) {
- GST_WARNING_OBJECT (osxbuf, "Failed to remove render callback");
- }
-
- /* Remove the RenderNotify too */
- status = AudioUnitRemoveRenderNotify (osxbuf->audiounit,
- (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
-
- if (status) {
- GST_WARNING_OBJECT (osxbuf, "Failed to remove render notify callback");
- }
-
- /* We're deactivated.. */
- osxbuf->io_proc_needs_deactivation = FALSE;
- osxbuf->io_proc_active = FALSE;
-}
-
-static OSStatus
-gst_osx_ring_buffer_render_notify (GstOsxRingBuffer * osxbuf,
- AudioUnitRenderActionFlags * ioActionFlags,
- const AudioTimeStamp * inTimeStamp,
- unsigned int inBusNumber,
- unsigned int inNumberFrames, AudioBufferList * ioData)
-{
- /* Before rendering a frame, we get the PreRender notification.
- * Here, we detach the RenderCallback if we've been paused.
- *
- * This is necessary (rather than just directly detaching it) to work
- * around some thread-safety issues in CoreAudio
- */
- if ((*ioActionFlags) & kAudioUnitRenderAction_PreRender) {
- if (osxbuf->io_proc_needs_deactivation) {
- gst_osx_ring_buffer_remove_render_callback (osxbuf);
- }
- }
-
- return noErr;
-}
-
-static gboolean
-gst_osx_ring_buffer_start (GstRingBuffer * buf)
-{
- OSStatus status;
- GstOsxRingBuffer *osxbuf;
- AURenderCallbackStruct input;
- AudioUnitPropertyID callback_type;
-
- osxbuf = GST_OSX_RING_BUFFER (buf);
-
- GST_DEBUG ("osx ring buffer start ioproc: 0x%p device_id %lu",
- osxbuf->element->io_proc, (gulong) osxbuf->device_id);
- if (!osxbuf->io_proc_active) {
- callback_type = osxbuf->is_src ?
- kAudioOutputUnitProperty_SetInputCallback :
- kAudioUnitProperty_SetRenderCallback;
-
- input.inputProc = (AURenderCallback) osxbuf->element->io_proc;
- input.inputProcRefCon = osxbuf;
-
- status = AudioUnitSetProperty (osxbuf->audiounit, callback_type, kAudioUnitScope_Global, 0, /* N/A for global */
- &input, sizeof (input));
-
- if (status) {
- GST_WARNING ("AudioUnitSetProperty returned %d", (int) status);
- return FALSE;
- }
- // ### does it make sense to do this notify stuff for input mode?
- status = AudioUnitAddRenderNotify (osxbuf->audiounit,
- (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
-
- if (status) {
- GST_WARNING ("AudioUnitAddRenderNotify returned %d", (int) status);
- return FALSE;
- }
-
- osxbuf->io_proc_active = TRUE;
- }
-
- osxbuf->io_proc_needs_deactivation = FALSE;
-
- status = AudioOutputUnitStart (osxbuf->audiounit);
- if (status) {
- GST_WARNING ("AudioOutputUnitStart returned %d", (int) status);
- return FALSE;
- }
- return TRUE;
-}
-
-// ###
-static gboolean
-gst_osx_ring_buffer_pause (GstRingBuffer * buf)
-{
- GstOsxRingBuffer *osxbuf = GST_OSX_RING_BUFFER (buf);
-
- GST_DEBUG ("osx ring buffer pause ioproc: 0x%p device_id %lu",
- osxbuf->element->io_proc, (gulong) osxbuf->device_id);
- if (osxbuf->io_proc_active) {
- /* CoreAudio isn't threadsafe enough to do this here; we must deactivate
- * the render callback elsewhere. See:
- * http://lists.apple.com/archives/Coreaudio-api/2006/Mar/msg00010.html
- */
- osxbuf->io_proc_needs_deactivation = TRUE;
- }
- return TRUE;
-}
-
-// ###
-static gboolean
-gst_osx_ring_buffer_stop (GstRingBuffer * buf)
-{
- OSErr status;
- GstOsxRingBuffer *osxbuf;
-
- osxbuf = GST_OSX_RING_BUFFER (buf);
-
- GST_DEBUG ("osx ring buffer stop ioproc: 0x%p device_id %lu",
- osxbuf->element->io_proc, (gulong) osxbuf->device_id);
-
- status = AudioOutputUnitStop (osxbuf->audiounit);
- if (status)
- GST_WARNING ("AudioOutputUnitStop returned %d", (int) status);
-
- // ###: why is it okay to directly remove from here but not from pause() ?
- if (osxbuf->io_proc_active) {
- gst_osx_ring_buffer_remove_render_callback (osxbuf);
- }
- return TRUE;
-}
-
-static guint
-gst_osx_ring_buffer_delay (GstRingBuffer * buf)
-{
- double latency;
- UInt32 size = sizeof (double);
- GstOsxRingBuffer *osxbuf;
- OSStatus status;
- guint samples;
-
- osxbuf = GST_OSX_RING_BUFFER (buf);
-
- status = AudioUnitGetProperty (osxbuf->audiounit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0, /* N/A for global */
- &latency, &size);
-
- if (status) {
- GST_WARNING_OBJECT (buf, "Failed to get latency: %d", (int) status);
- return 0;
- }
-
- samples = latency * GST_RING_BUFFER (buf)->spec.rate;
- GST_DEBUG_OBJECT (buf, "Got latency: %f seconds -> %d samples", latency,
- samples);
- return samples;
-}
-
static AudioBufferList *
buffer_list_alloc (int channels, int size)
{
@@ -703,3 +346,896 @@
g_free (list);
}
+
+typedef struct
+{
+ GMutex *lock;
+ GCond *cond;
+} PropertyMutex;
+
+static OSStatus
+_audio_stream_format_listener (AudioObjectID inObjectID,
+ UInt32 inNumberAddresses,
+ const AudioObjectPropertyAddress inAddresses[], void *inClientData)
+{
+ OSStatus status = noErr;
+ guint i;
+ PropertyMutex *prop_mutex = inClientData;
+
+ for (i = 0; i < inNumberAddresses; i++) {
+ if (inAddresses[i].mSelector == kAudioStreamPropertyPhysicalFormat) {
+ g_mutex_lock (prop_mutex->lock);
+ g_cond_signal (prop_mutex->cond);
+ g_mutex_unlock (prop_mutex->lock);
+ break;
+ }
+ }
+ return (status);
+}
+
+static gboolean
+_audio_stream_change_format (AudioStreamID stream_id,
+ AudioStreamBasicDescription format)
+{
+ OSStatus status = noErr;
+ gint i;
+ gboolean ret = FALSE;
+ AudioStreamBasicDescription cformat;
+ PropertyMutex prop_mutex;
+
+ AudioObjectPropertyAddress formatAddress = {
+ kAudioStreamPropertyPhysicalFormat,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ GST_DEBUG ("setting stream format: " CORE_AUDIO_FORMAT,
+ CORE_AUDIO_FORMAT_ARGS (format));
+
+ /* Condition because SetProperty is asynchronous */
+ prop_mutex.lock = g_mutex_new ();
+ prop_mutex.cond = g_cond_new ();
+
+ g_mutex_lock (prop_mutex.lock);
+
+ /* Install the property listener to serialize the operations */
+ status = AudioObjectAddPropertyListener (stream_id, &formatAddress,
+ _audio_stream_format_listener, (void *) &prop_mutex);
+ if (status != noErr) {
+ GST_ERROR ("AudioObjectAddPropertyListener failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ goto done;
+ }
+
+ /* Change the format */
+ if (!_audio_stream_set_current_format (stream_id, format)) {
+ goto done;
+ }
+
+ /* The AudioObjectSetProperty is not only asynchronous
+ * it is also not atomic in its behaviour.
+ * Therefore we check 4 times before we really give up. */
+ for (i = 0; i < 4; i++) {
+ GTimeVal timeout;
+
+ g_get_current_time (&timeout);
+ g_time_val_add (&timeout, 250000);
+
+ if (!g_cond_timed_wait (prop_mutex.cond, prop_mutex.lock, &timeout)) {
+ GST_LOG ("timeout...");
+ }
+
+ if (_audio_stream_get_current_format (stream_id, &cformat)) {
+ GST_DEBUG ("current stream format: " CORE_AUDIO_FORMAT,
+ CORE_AUDIO_FORMAT_ARGS (cformat));
+
+ if (cformat.mSampleRate == format.mSampleRate &&
+ cformat.mFormatID == format.mFormatID &&
+ cformat.mFramesPerPacket == format.mFramesPerPacket) {
+ /* The right format is now active */
+ break;
+ }
+ }
+ }
+
+ if (cformat.mSampleRate != format.mSampleRate ||
+ cformat.mFormatID != format.mFormatID ||
+ cformat.mFramesPerPacket != format.mFramesPerPacket) {
+ goto done;
+ }
+
+ ret = TRUE;
+
+done:
+ /* Removing the property listener */
+ status = AudioObjectRemovePropertyListener (stream_id,
+ &formatAddress, _audio_stream_format_listener, (void *) &prop_mutex);
+ if (status != noErr) {
+ GST_ERROR ("AudioObjectRemovePropertyListener failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ }
+ /* Destroy the lock and condition */
+ g_mutex_unlock (prop_mutex.lock);
+ g_mutex_free (prop_mutex.lock);
+ g_cond_free (prop_mutex.cond);
+
+ return ret;
+}
+
+static OSStatus
+_audio_stream_hardware_changed_listener (AudioObjectID inObjectID,
+ UInt32 inNumberAddresses,
+ const AudioObjectPropertyAddress inAddresses[], void *inClientData)
+{
+ OSStatus status = noErr;
+ guint i;
+ GstOsxRingBuffer *osxbuf = inClientData;
+
+ for (i = 0; i < inNumberAddresses; i++) {
+ if (inAddresses[i].mSelector == kAudioDevicePropertyDeviceHasChanged) {
+ if (!_audio_device_is_spdif_avail (osxbuf->device_id)) {
+ GstOsxAudioSink *sink = GST_OSX_AUDIO_SINK (GST_OBJECT_PARENT (osxbuf));
+ GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
+ ("SPDIF output no longer available"),
+ ("Audio device is reporting that SPDIF output isn't available"));
+ }
+ break;
+ }
+ }
+ return (status);
+}
+
+static gboolean
+gst_osx_ring_buffer_monitorize_spdif (GstOsxRingBuffer * osxbuf)
+{
+ OSStatus status = noErr;
+ gboolean ret = TRUE;
+
+ AudioObjectPropertyAddress propAddress = {
+ kAudioDevicePropertyDeviceHasChanged,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ /* Install the property listener */
+ status = AudioObjectAddPropertyListener (osxbuf->device_id,
+ &propAddress, _audio_stream_hardware_changed_listener, (void *) osxbuf);
+ if (status != noErr) {
+ GST_ERROR ("AudioObjectAddPropertyListener failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_unmonitorize_spdif (GstOsxRingBuffer * osxbuf)
+{
+ OSStatus status = noErr;
+ gboolean ret = TRUE;
+
+ AudioObjectPropertyAddress propAddress = {
+ kAudioDevicePropertyDeviceHasChanged,
+ kAudioObjectPropertyScopeGlobal,
+ kAudioObjectPropertyElementMaster
+ };
+
+ /* Remove the property listener */
+ status = AudioObjectRemovePropertyListener (osxbuf->device_id,
+ &propAddress, _audio_stream_hardware_changed_listener, (void *) osxbuf);
+ if (status != noErr) {
+ GST_ERROR ("AudioObjectRemovePropertyListener failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_open_spdif (GstOsxRingBuffer * osxbuf)
+{
+ gboolean res = FALSE;
+ pid_t hog_pid, own_pid = getpid ();
+
+ /* We need the device in exclusive and disable the mixing */
+ hog_pid = _audio_device_get_hog (osxbuf->device_id);
+
+ if (hog_pid != -1 && hog_pid != own_pid) {
+ GST_DEBUG_OBJECT (osxbuf,
+ "device is currently in use by another application");
+ goto done;
+ }
+
+ if (_audio_device_set_hog (osxbuf->device_id, own_pid)) {
+ osxbuf->hog_pid = own_pid;
+ }
+
+ if (_audio_device_set_mixing (osxbuf->device_id, FALSE)) {
+ GST_DEBUG_OBJECT (osxbuf, "disabled mixing on the device");
+ osxbuf->disabled_mixing = TRUE;
+ }
+
+ res = TRUE;
+done:
+ return res;
+}
+
+static gboolean
+gst_osx_ring_buffer_close_spdif (GstOsxRingBuffer * osxbuf)
+{
+ pid_t hog_pid;
+
+ gst_osx_ring_buffer_unmonitorize_spdif (osxbuf);
+
+ if (osxbuf->revert_format) {
+ if (!_audio_stream_change_format (osxbuf->stream_id,
+ osxbuf->original_format)) {
+ GST_WARNING ("Format revert failed");
+ }
+ osxbuf->revert_format = FALSE;
+ }
+
+ if (osxbuf->disabled_mixing) {
+ _audio_device_set_mixing (osxbuf->device_id, TRUE);
+ osxbuf->disabled_mixing = FALSE;
+ }
+
+ if (osxbuf->hog_pid != -1) {
+ hog_pid = _audio_device_get_hog (osxbuf->device_id);
+ if (hog_pid == getpid ()) {
+ if (_audio_device_set_hog (osxbuf->device_id, -1)) {
+ osxbuf->hog_pid = -1;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static OSStatus
+gst_osx_ring_buffer_io_proc_spdif (AudioDeviceID inDevice,
+ const AudioTimeStamp * inNow,
+ const void *inInputData,
+ const AudioTimeStamp * inTimestamp,
+ AudioBufferList * bufferList,
+ const AudioTimeStamp * inOutputTime, GstOsxRingBuffer * osxbuf)
+{
+ OSStatus status;
+
+ status = osxbuf->element->io_proc (osxbuf, NULL, inTimestamp, 0, 0,
+ bufferList);
+
+ return status;
+}
+
+static gboolean
+gst_osx_ring_buffer_acquire_spdif (GstOsxRingBuffer * osxbuf,
+ AudioStreamBasicDescription format)
+{
+ AudioStreamID *streams = NULL;
+ gint i, j, nstreams = 0;
+ gboolean ret = FALSE;
+
+ if (!gst_osx_ring_buffer_open_spdif (osxbuf))
+ goto done;
+
+ streams = _audio_device_get_streams (osxbuf->device_id, &nstreams);
+
+ for (i = 0; i < nstreams; i++) {
+ AudioStreamRangedDescription *formats = NULL;
+ gint nformats = 0;
+
+ formats = _audio_stream_get_formats (streams[i], &nformats);
+
+ if (formats) {
+ gboolean is_spdif = FALSE;
+
+ /* Check if one of the supported formats is a digital format */
+ for (j = 0; j < nformats; j++) {
+ if (CORE_AUDIO_FORMAT_IS_SPDIF (formats[j])) {
+ is_spdif = TRUE;
+ break;
+ }
+ }
+
+ if (is_spdif) {
+ /* if this stream supports a digital (cac3) format,
+ * then go set it. */
+ gint requested_rate_format = -1;
+ gint current_rate_format = -1;
+ gint backup_rate_format = -1;
+
+ osxbuf->stream_id = streams[i];
+ osxbuf->stream_idx = i;
+
+ if (!osxbuf->revert_format) {
+ if (!_audio_stream_get_current_format (osxbuf->stream_id,
+ &osxbuf->original_format)) {
+ GST_WARNING ("format could not be saved");
+ g_free (formats);
+ continue;
+ }
+ osxbuf->revert_format = TRUE;
+ }
+
+ for (j = 0; j < nformats; j++) {
+ if (CORE_AUDIO_FORMAT_IS_SPDIF (formats[j])) {
+ GST_LOG ("found stream format: " CORE_AUDIO_FORMAT,
+ CORE_AUDIO_FORMAT_ARGS (formats[j].mFormat));
+
+ if (formats[j].mFormat.mSampleRate == format.mSampleRate) {
+ requested_rate_format = j;
+ break;
+ } else if (formats[j].mFormat.mSampleRate ==
+ osxbuf->original_format.mSampleRate) {
+ current_rate_format = j;
+ } else {
+ if (backup_rate_format < 0 ||
+ formats[j].mFormat.mSampleRate >
+ formats[backup_rate_format].mFormat.mSampleRate) {
+ backup_rate_format = j;
+ }
+ }
+ }
+ }
+
+ if (requested_rate_format >= 0) {
+ /* We prefer to output at the rate of the original audio */
+ osxbuf->stream_format = formats[requested_rate_format].mFormat;
+ } else if (current_rate_format >= 0) {
+ /* If not possible, we will try to use the current rate */
+ osxbuf->stream_format = formats[current_rate_format].mFormat;
+ } else {
+ /* And if we have to, any digital format will be just
+ * fine (highest rate possible) */
+ osxbuf->stream_format = formats[backup_rate_format].mFormat;
+ }
+ }
+ g_free (formats);
+ }
+ }
+ g_free (streams);
+
+ GST_DEBUG ("original stream format: " CORE_AUDIO_FORMAT,
+ CORE_AUDIO_FORMAT_ARGS (osxbuf->original_format));
+
+ if (!_audio_stream_change_format (osxbuf->stream_id, osxbuf->stream_format))
+ goto done;
+
+ GST_DEBUG_OBJECT (osxbuf, "osx ring buffer acquired");
+
+ ret = TRUE;
+
+done:
+ return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_acquire_analog (GstOsxRingBuffer * osxbuf,
+ AudioStreamBasicDescription format, GstCaps * caps)
+{
+ /* Configure the output stream and allocate ringbuffer memory */
+ AudioChannelLayout *layout = NULL;
+ OSStatus status;
+ UInt32 propertySize;
+ int channels = format.mChannelsPerFrame;
+ int layoutSize;
+ int element;
+ int i;
+ AudioUnitScope scope;
+ gboolean ret = FALSE;
+ GstStructure *structure;
+ GstAudioChannelPosition *positions;
+ UInt32 frameSize;
+
+ /* Describe channels */
+ layoutSize = sizeof (AudioChannelLayout) +
+ channels * sizeof (AudioChannelDescription);
+ layout = g_malloc (layoutSize);
+
+ structure = gst_caps_get_structure (caps, 0);
+ positions = gst_audio_get_channel_positions (structure);
+
+ layout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
+ layout->mChannelBitmap = 0; /* Not used */
+ layout->mNumberChannelDescriptions = channels;
+ for (i = 0; i < channels; i++) {
+ if (positions) {
+ layout->mChannelDescriptions[i].mChannelLabel =
+ gst_audio_channel_position_to_coreaudio_channel_label (positions[i],
+ i);
+ } else {
+ /* Discrete channel numbers are ORed into this */
+ layout->mChannelDescriptions[i].mChannelLabel =
+ kAudioChannelLabel_Discrete_0 | i;
+ }
+
+ /* Others unused */
+ layout->mChannelDescriptions[i].mChannelFlags = 0;
+ layout->mChannelDescriptions[i].mCoordinates[0] = 0.f;
+ layout->mChannelDescriptions[i].mCoordinates[1] = 0.f;
+ layout->mChannelDescriptions[i].mCoordinates[2] = 0.f;
+ }
+
+ if (positions) {
+ g_free (positions);
+ positions = NULL;
+ }
+
+ GST_DEBUG_OBJECT (osxbuf, "Setting format for AudioUnit");
+
+ scope = osxbuf->is_src ? kAudioUnitScope_Output : kAudioUnitScope_Input;
+ element = osxbuf->is_src ? 1 : 0;
+
+ propertySize = sizeof (AudioStreamBasicDescription);
+ status = AudioUnitSetProperty (osxbuf->audiounit,
+ kAudioUnitProperty_StreamFormat, scope, element, &format, propertySize);
+
+ if (status) {
+ GST_WARNING_OBJECT (osxbuf,
+ "Failed to set audio description: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ goto done;
+ }
+
+ if (layoutSize) {
+ status = AudioUnitSetProperty (osxbuf->audiounit,
+ kAudioUnitProperty_AudioChannelLayout,
+ scope, element, layout, layoutSize);
+ if (status) {
+ GST_WARNING_OBJECT (osxbuf,
+ "Failed to set output channel layout: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ goto done;
+ }
+ }
+
+ /* create AudioBufferList needed for recording */
+ if (osxbuf->is_src) {
+ propertySize = sizeof (frameSize);
+ status = AudioUnitGetProperty (osxbuf->audiounit, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, 0, /* N/A for global */
+ &frameSize, &propertySize);
+
+ if (status) {
+ GST_WARNING_OBJECT (osxbuf, "Failed to get frame size: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ goto done;
+ }
+
+ osxbuf->recBufferList = buffer_list_alloc (channels,
+ frameSize * format.mBytesPerFrame);
+ }
+
+ /* Specify which device we're using. */
+ GST_DEBUG_OBJECT (osxbuf, "Bind AudioUnit to device %d",
+ (int) osxbuf->device_id);
+ status = AudioUnitSetProperty (osxbuf->audiounit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, /* N/A for global */
+ &osxbuf->device_id, sizeof (AudioDeviceID));
+ if (status) {
+ GST_ERROR_OBJECT (osxbuf, "Failed binding to device: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ goto audiounit_error;
+ }
+
+ /* Initialize the AudioUnit */
+ status = AudioUnitInitialize (osxbuf->audiounit);
+ if (status) {
+ GST_ERROR_OBJECT (osxbuf, "Failed to initialise AudioUnit: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ goto audiounit_error;
+ }
+
+ GST_DEBUG_OBJECT (osxbuf, "osx ring buffer acquired");
+
+ ret = TRUE;
+
+done:
+ g_free (layout);
+ return ret;
+
+audiounit_error:
+ if (osxbuf->recBufferList) {
+ buffer_list_free (osxbuf->recBufferList);
+ osxbuf->recBufferList = NULL;
+ }
+ return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
+{
+ gboolean ret = FALSE;
+ GstOsxRingBuffer *osxbuf;
+ AudioStreamBasicDescription format;
+
+ osxbuf = GST_OSX_RING_BUFFER (buf);
+
+ if (RINGBUFFER_IS_SPDIF (spec->type)) {
+ format.mFormatID = kAudioFormat60958AC3;
+ format.mSampleRate = (double) spec->rate;
+ format.mChannelsPerFrame = 2;
+ format.mFormatFlags = kAudioFormatFlagIsSignedInteger |
+ kAudioFormatFlagIsPacked | kAudioFormatFlagIsNonMixable;
+ format.mBytesPerFrame = 0;
+ format.mBitsPerChannel = 16;
+ format.mBytesPerPacket = 6144;
+ format.mFramesPerPacket = 1536;
+ format.mReserved = 0;
+ spec->segsize = 6144;
+ spec->segtotal = 10;
+ osxbuf->is_passthrough = TRUE;
+ } else {
+ int width, depth;
+ /* Fill out the audio description we're going to be using */
+ format.mFormatID = kAudioFormatLinearPCM;
+ format.mSampleRate = (double) spec->rate;
+ format.mChannelsPerFrame = spec->channels;
+ if (spec->type == GST_BUFTYPE_FLOAT) {
+ format.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
+ width = depth = spec->width;
+ } else {
+ format.mFormatFlags = kAudioFormatFlagIsSignedInteger;
+ width = spec->width;
+ depth = spec->depth;
+ if (width == depth) {
+ format.mFormatFlags |= kAudioFormatFlagIsPacked;
+ } else {
+ format.mFormatFlags |= kAudioFormatFlagIsAlignedHigh;
+ }
+ if (spec->bigend) {
+ format.mFormatFlags |= kAudioFormatFlagIsBigEndian;
+ }
+ }
+ format.mBytesPerFrame = spec->channels * (width >> 3);
+ format.mBitsPerChannel = depth;
+ format.mBytesPerPacket = spec->channels * (width >> 3);
+ format.mFramesPerPacket = 1;
+ format.mReserved = 0;
+ spec->segsize =
+ (spec->latency_time * spec->rate / G_USEC_PER_SEC) *
+ spec->bytes_per_sample;
+ spec->segtotal = spec->buffer_time / spec->latency_time;
+ osxbuf->stream_idx = 0;
+ osxbuf->is_passthrough = FALSE;
+ }
+
+ GST_DEBUG_OBJECT (osxbuf, "Format: " CORE_AUDIO_FORMAT,
+ CORE_AUDIO_FORMAT_ARGS (format));
+
+ buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
+ memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
+
+ if (osxbuf->is_passthrough) {
+ ret = gst_osx_ring_buffer_acquire_spdif (osxbuf, format);
+ if (ret) {
+ gst_osx_ring_buffer_monitorize_spdif (osxbuf);
+ }
+ } else {
+ ret = gst_osx_ring_buffer_acquire_analog (osxbuf, format, spec->caps);
+ }
+
+ if (!ret) {
+ gst_buffer_unref (buf->data);
+ buf->data = NULL;
+ }
+
+ osxbuf->segoffset = 0;
+
+ return ret;
+}
+
+static gboolean
+gst_osx_ring_buffer_release (GstRingBuffer * buf)
+{
+ GstOsxRingBuffer *osxbuf;
+
+ osxbuf = GST_OSX_RING_BUFFER (buf);
+
+ AudioUnitUninitialize (osxbuf->audiounit);
+
+ gst_buffer_unref (buf->data);
+ buf->data = NULL;
+
+ if (osxbuf->recBufferList) {
+ buffer_list_free (osxbuf->recBufferList);
+ osxbuf->recBufferList = NULL;
+ }
+
+ return TRUE;
+}
+
+static OSStatus
+gst_osx_ring_buffer_render_notify (GstOsxRingBuffer * osxbuf,
+ AudioUnitRenderActionFlags * ioActionFlags,
+ const AudioTimeStamp * inTimeStamp,
+ unsigned int inBusNumber,
+ unsigned int inNumberFrames, AudioBufferList * ioData)
+{
+ /* Before rendering a frame, we get the PreRender notification.
+ * Here, we detach the RenderCallback if we've been paused.
+ *
+ * This is necessary (rather than just directly detaching it) to
+ * work around some thread-safety issues in CoreAudio
+ */
+ if ((*ioActionFlags) & kAudioUnitRenderAction_PreRender) {
+ if (osxbuf->io_proc_needs_deactivation) {
+ gst_osx_ring_buffer_remove_render_callback (osxbuf);
+ }
+ }
+
+ return noErr;
+}
+
+static void
+gst_osx_ring_buffer_remove_render_callback (GstOsxRingBuffer * osxbuf)
+{
+ AURenderCallbackStruct input;
+ OSStatus status;
+
+ /* Deactivate the render callback by calling SetRenderCallback
+ * with a NULL inputProc.
+ */
+ input.inputProc = NULL;
+ input.inputProcRefCon = NULL;
+
+ status = AudioUnitSetProperty (osxbuf->audiounit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0, /* N/A for global */
+ &input, sizeof (input));
+
+ if (status) {
+ GST_WARNING_OBJECT (osxbuf, "Failed to remove render callback %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ }
+
+ /* Remove the RenderNotify too */
+ status = AudioUnitRemoveRenderNotify (osxbuf->audiounit,
+ (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
+
+ if (status) {
+ GST_WARNING_OBJECT (osxbuf,
+ "Failed to remove render notify callback %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+
+ /* We're deactivated.. */
+ osxbuf->io_proc_needs_deactivation = FALSE;
+ osxbuf->io_proc_active = FALSE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_start (GstOsxRingBuffer * osxbuf)
+{
+ OSStatus status;
+ AURenderCallbackStruct input;
+ AudioUnitPropertyID callback_type;
+
+ GST_DEBUG ("osx ring buffer start ioproc: %p device_id %lu",
+ osxbuf->element->io_proc, (gulong) osxbuf->device_id);
+ if (!osxbuf->io_proc_active) {
+ callback_type = osxbuf->is_src ?
+ kAudioOutputUnitProperty_SetInputCallback :
+ kAudioUnitProperty_SetRenderCallback;
+
+ input.inputProc = (AURenderCallback) osxbuf->element->io_proc;
+ input.inputProcRefCon = osxbuf;
+
+ status = AudioUnitSetProperty (osxbuf->audiounit, callback_type, kAudioUnitScope_Global, 0, /* N/A for global */
+ &input, sizeof (input));
+
+ if (status) {
+ GST_ERROR ("AudioUnitSetProperty failed: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+ // ### does it make sense to do this notify stuff for input mode?
+ status = AudioUnitAddRenderNotify (osxbuf->audiounit,
+ (AURenderCallback) gst_osx_ring_buffer_render_notify, osxbuf);
+
+ if (status) {
+ GST_ERROR ("AudioUnitAddRenderNotify failed %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+
+ osxbuf->io_proc_active = TRUE;
+ }
+
+ osxbuf->io_proc_needs_deactivation = FALSE;
+
+ status = AudioOutputUnitStart (osxbuf->audiounit);
+ if (status) {
+ GST_ERROR ("AudioOutputUnitStart failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_stop (GstOsxRingBuffer * osxbuf)
+{
+ OSErr status;
+
+ GST_DEBUG ("osx ring buffer stop ioproc: %p device_id %lu",
+ osxbuf->element->io_proc, (gulong) osxbuf->device_id);
+
+ status = AudioOutputUnitStop (osxbuf->audiounit);
+ if (status) {
+ GST_WARNING ("AudioOutputUnitStop failed: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+ // ###: why is it okay to directly remove from here but not from pause() ?
+ if (osxbuf->io_proc_active) {
+ gst_osx_ring_buffer_remove_render_callback (osxbuf);
+ }
+ return TRUE;
+}
+
+static void
+gst_osx_ring_buffer_remove_render_spdif_callback (GstOsxRingBuffer * osxbuf)
+{
+ OSStatus status;
+
+ /* Deactivate the render callback by calling
+ * AudioDeviceDestroyIOProcID */
+ status = AudioDeviceDestroyIOProcID (osxbuf->device_id, osxbuf->procID);
+ if (status != noErr) {
+ GST_ERROR ("AudioDeviceDestroyIOProcID failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ }
+
+ GST_DEBUG ("osx ring buffer removed ioproc ID: %p device_id %lu",
+ osxbuf->procID, (gulong) osxbuf->device_id);
+
+ /* We're deactivated.. */
+ osxbuf->procID = 0;
+ osxbuf->io_proc_needs_deactivation = FALSE;
+ osxbuf->io_proc_active = FALSE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_spdif_start (GstOsxRingBuffer * osxbuf)
+{
+ OSErr status;
+
+ GST_DEBUG ("osx ring buffer start ioproc ID: %p device_id %lu",
+ osxbuf->procID, (gulong) osxbuf->device_id);
+
+ if (!osxbuf->io_proc_active) {
+ /* Add IOProc callback */
+ status = AudioDeviceCreateIOProcID (osxbuf->device_id,
+ (AudioDeviceIOProc) gst_osx_ring_buffer_io_proc_spdif,
+ (void *) osxbuf, &osxbuf->procID);
+ if (status != noErr) {
+ GST_ERROR ("AudioDeviceCreateIOProcID failed: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+ osxbuf->io_proc_active = TRUE;
+ }
+
+ osxbuf->io_proc_needs_deactivation = FALSE;
+
+ /* Start device */
+ status = AudioDeviceStart (osxbuf->device_id, osxbuf->procID);
+ if (status != noErr) {
+ GST_ERROR ("AudioDeviceStart failed: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+gst_osx_ring_buffer_io_proc_spdif_stop (GstOsxRingBuffer * osxbuf)
+{
+ OSErr status;
+
+ /* Stop device */
+ status = AudioDeviceStop (osxbuf->device_id, osxbuf->procID);
+ if (status != noErr) {
+ GST_ERROR ("AudioDeviceStop failed: %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (status));
+ }
+
+ GST_DEBUG ("osx ring buffer stop ioproc ID: %p device_id %lu",
+ osxbuf->procID, (gulong) osxbuf->device_id);
+
+ if (osxbuf->io_proc_active) {
+ gst_osx_ring_buffer_remove_render_spdif_callback (osxbuf);
+ }
+
+ gst_osx_ring_buffer_close_spdif (osxbuf);
+
+ return TRUE;
+}
+
+static gboolean
+gst_osx_ring_buffer_start (GstRingBuffer * buf)
+{
+ GstOsxRingBuffer *osxbuf;
+
+ osxbuf = GST_OSX_RING_BUFFER (buf);
+
+ if (osxbuf->is_passthrough) {
+ return gst_osx_ring_buffer_io_proc_spdif_start (osxbuf);
+ } else {
+ return gst_osx_ring_buffer_io_proc_start (osxbuf);
+ }
+}
+
+static gboolean
+gst_osx_ring_buffer_pause (GstRingBuffer * buf)
+{
+ GstOsxRingBuffer *osxbuf = GST_OSX_RING_BUFFER (buf);
+
+ if (osxbuf->is_passthrough) {
+ GST_DEBUG ("osx ring buffer pause ioproc ID: %p device_id %lu",
+ osxbuf->procID, (gulong) osxbuf->device_id);
+
+ if (osxbuf->io_proc_active) {
+ gst_osx_ring_buffer_remove_render_spdif_callback (osxbuf);
+ }
+ } else {
+ GST_DEBUG ("osx ring buffer pause ioproc: %p device_id %lu",
+ osxbuf->element->io_proc, (gulong) osxbuf->device_id);
+ if (osxbuf->io_proc_active) {
+ /* CoreAudio isn't threadsafe enough to do this here;
+ * we must deactivate the render callback elsewhere. See:
+ * http://lists.apple.com/archives/Coreaudio-api/2006/Mar/msg00010.html
+ */
+ osxbuf->io_proc_needs_deactivation = TRUE;
+ }
+ }
+ return TRUE;
+}
+
+
+static gboolean
+gst_osx_ring_buffer_stop (GstRingBuffer * buf)
+{
+ GstOsxRingBuffer *osxbuf;
+
+ osxbuf = GST_OSX_RING_BUFFER (buf);
+
+ if (osxbuf->is_passthrough) {
+ gst_osx_ring_buffer_io_proc_spdif_stop (osxbuf);
+ } else {
+ gst_osx_ring_buffer_io_proc_stop (osxbuf);
+ }
+
+ return TRUE;
+}
+
+static guint
+gst_osx_ring_buffer_delay (GstRingBuffer * buf)
+{
+ double latency;
+ UInt32 size = sizeof (double);
+ GstOsxRingBuffer *osxbuf;
+ OSStatus status;
+ guint samples;
+
+ osxbuf = GST_OSX_RING_BUFFER (buf);
+
+ if (osxbuf->is_passthrough) {
+ samples = _audio_device_get_latency (osxbuf->device_id);
+ samples += _audio_stream_get_latency (osxbuf->stream_id);
+ latency = (double) samples / GST_RING_BUFFER (buf)->spec.rate;
+ } else {
+ status = AudioUnitGetProperty (osxbuf->audiounit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0, /* N/A for global */
+ &latency, &size);
+
+ if (status) {
+ GST_WARNING_OBJECT (buf, "Failed to get latency: %"
+ GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status));
+ return 0;
+ }
+
+ samples = latency * GST_RING_BUFFER (buf)->spec.rate;
+ }
+ GST_DEBUG_OBJECT (buf, "Got latency: %f seconds -> %d samples",
+ latency, samples);
+ return samples;
+}
diff --git a/sys/osxaudio/gstosxringbuffer.h b/sys/osxaudio/gstosxringbuffer.h
index 5e6dbe4..4394fa6 100644
--- a/sys/osxaudio/gstosxringbuffer.h
+++ b/sys/osxaudio/gstosxringbuffer.h
@@ -1,6 +1,7 @@
/*
* GStreamer
* Copyright (C) 2006 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -47,6 +48,8 @@
#include <gst/gst.h>
#include <gst/audio/gstringbuffer.h>
#include <CoreAudio/CoreAudio.h>
+#include <AudioToolbox/AudioToolbox.h>
+
#include "gstosxaudioelement.h"
G_BEGIN_DECLS
@@ -64,6 +67,8 @@
#define GST_IS_OSX_RING_BUFFER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OSX_RING_BUFFER))
+#define RINGBUFFER_IS_SPDIF(t) ((t) == GST_BUFTYPE_AC3 || (t) == GST_BUFTYPE_DTS)
+
typedef struct _GstOsxRingBuffer GstOsxRingBuffer;
typedef struct _GstOsxRingBufferClass GstOsxRingBufferClass;
@@ -72,14 +77,29 @@
GstRingBuffer object;
gboolean is_src;
- AudioUnit audiounit;
+ gboolean is_passthrough;
+ gint stream_idx;
+
AudioDeviceID device_id;
gboolean io_proc_active;
gboolean io_proc_needs_deactivation;
guint buffer_len;
guint segoffset;
- AudioBufferList * recBufferList;
- GstOsxAudioElementInterface * element;
+
+ GstOsxAudioElementInterface *element;
+
+ /* For LPCM in/out */
+ AudioUnit audiounit;
+ AudioBufferList *recBufferList;
+
+ /* For SPDIF out */
+ pid_t hog_pid;
+ gboolean disabled_mixing;
+ AudioStreamID stream_id;
+ gboolean revert_format;
+ AudioStreamBasicDescription stream_format;
+ AudioStreamBasicDescription original_format;
+ AudioDeviceIOProcID procID;
};
struct _GstOsxRingBufferClass
@@ -92,3 +112,4 @@
G_END_DECLS
#endif /* __GST_OSX_RING_BUFFER_H__ */
+
diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in
index a616add..618afc0 100644
--- a/sys/osxvideo/Makefile.in
+++ b/sys/osxvideo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/osxvideo/osxvideosink.h b/sys/osxvideo/osxvideosink.h
index 37b68c2..622f0ad 100644
--- a/sys/osxvideo/osxvideosink.h
+++ b/sys/osxvideo/osxvideosink.h
@@ -90,6 +90,10 @@
#else
guint cocoa_timeout;
#endif
+ GMutex *mrl_check_lock;
+ GCond *mrl_check_cond;
+ gboolean mrl_check_done;
+ gboolean main_run_loop_running;
gboolean app_started;
gboolean keep_par;
gboolean embed;
@@ -145,6 +149,7 @@
#ifdef RUN_NS_APP_THREAD
+ (BOOL) isMainThread;
-(void) nsAppThread;
+-(void) checkMainRunLoop;
#endif
@end
diff --git a/sys/osxvideo/osxvideosink.m b/sys/osxvideo/osxvideosink.m
index 0bcd494..7a452cb 100644
--- a/sys/osxvideo/osxvideosink.m
+++ b/sys/osxvideo/osxvideosink.m
@@ -115,6 +115,51 @@
}
static void
+gst_osx_videosink_check_main_run_loop (GstOSXVideoSink *sink)
+{
+ /* check if the main run loop is running */
+ gboolean is_running;
+
+ if (sink->mrl_check_done) {
+ return;
+ }
+ /* the easy way */
+ is_running = [[NSRunLoop mainRunLoop] currentMode] != nil;
+ if (is_running) {
+ goto exit;
+ } else {
+ /* the previous check doesn't always work with main loops that run
+ * cocoa's main run loop manually, like the gdk one, giving false
+ * negatives. This check defers a call to the main thread and waits to
+ * be awaken by this function. */
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ GstOSXVideoSinkObject * object = (GstOSXVideoSinkObject *) sink->osxvideosinkobject;
+ GTimeVal abstime;
+
+ g_mutex_lock(sink->mrl_check_lock);
+ [object performSelectorOnMainThread:
+ @selector(checkMainRunLoop)
+ withObject:nil waitUntilDone:NO];
+ /* Wait 100 ms */
+ g_get_current_time (&abstime);
+ g_time_val_add (&abstime, 100 * 1000);
+ is_running = g_cond_timed_wait(sink->mrl_check_cond,
+ sink->mrl_check_lock, &abstime);
+ g_mutex_unlock(sink->mrl_check_lock);
+
+ [pool release];
+ }
+
+exit:
+ {
+ GST_DEBUG_OBJECT(sink, "The main runloop %s is running",
+ is_running ? "" : " not ");
+ sink->main_run_loop_running = is_running;
+ sink->mrl_check_done = TRUE;
+ }
+}
+
+static void
gst_osx_video_sink_run_cocoa_loop (GstOSXVideoSink * sink )
{
/* Cocoa applications require a main runloop running to dispatch UI
@@ -124,7 +169,7 @@
* external NSView is passed to the sink through the GstVideoOverlay API,
* we need to run the cocoa mainloop somehow.
*/
- if ([[NSRunLoop mainRunLoop] currentMode] == nil) {
+ if (!sink->main_run_loop_running) {
#ifdef RUN_NS_APP_THREAD
/* run the main runloop in a separate thread */
@@ -205,6 +250,7 @@
GST_INFO_OBJECT (osxvideosink, "'have-ns-view' message sent");
osxvideosink->ns_app_thread = [NSThread mainThread];
+ gst_osx_videosink_check_main_run_loop (osxvideosink);
gst_osx_video_sink_run_cocoa_loop (osxvideosink);
[osxwindow->gstview setMainThread:osxvideosink->ns_app_thread];
@@ -462,6 +508,10 @@
sink->loop_thread_lock = g_mutex_new ();
sink->loop_thread_cond = g_cond_new ();
#endif
+ sink->mrl_check_lock = g_mutex_new ();
+ sink->mrl_check_cond = g_cond_new ();
+ sink->mrl_check_done = FALSE;
+ sink->main_run_loop_running = FALSE;
sink->app_started = FALSE;
sink->keep_par = FALSE;
}
@@ -490,6 +540,12 @@
if (osxvideosink->osxvideosinkobject)
[(GstOSXVideoSinkObject*)(osxvideosink->osxvideosinkobject) release];
+ if (osxvideosink->mrl_check_lock)
+ g_mutex_free (osxvideosink->mrl_check_lock);
+
+ if (osxvideosink->mrl_check_cond)
+ g_cond_free (osxvideosink->mrl_check_cond);
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -537,7 +593,7 @@
g_object_class_install_property (gobject_class, ARG_FORCE_PAR,
g_param_spec_boolean ("force-aspect-ratio", "force aspect ration",
"When enabled, scaling will respect original aspect ration",
- FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
}
static void
@@ -873,6 +929,13 @@
}
#endif
+-(void) checkMainRunLoop
+{
+ g_mutex_lock(osxvideosink->mrl_check_lock);
+ g_cond_signal(osxvideosink->mrl_check_cond);
+ g_mutex_unlock(osxvideosink->mrl_check_lock);
+}
+
@end
@ implementation GstBufferObject
diff --git a/sys/sunaudio/Makefile.in b/sys/sunaudio/Makefile.in
index f25c6fc..ae6b1b7 100644
--- a/sys/sunaudio/Makefile.in
+++ b/sys/sunaudio/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -253,7 +253,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/v4l2/Makefile.in b/sys/v4l2/Makefile.in
index 966423d..889a398 100644
--- a/sys/v4l2/Makefile.in
+++ b/sys/v4l2/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -285,7 +285,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -1054,16 +1056,16 @@
# these are all the rules generating the relevant files
$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
- $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
- glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+ $(GLIB_GENMARSHAL) --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
--fprod "\n/* enumerations from \"@filename@\" */\n" \
--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
@@ -1072,7 +1074,7 @@
$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
- $(AM_V_GEN)glib-mkenums \
+ $(AM_V_GEN)$(GLIB_MKENUMS) \
--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
--fprod "\n/* enumerations from \"@filename@\" */" \
--vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \
diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
index 9798770..d040d9d 100644
--- a/sys/v4l2/gstv4l2bufferpool.c
+++ b/sys/v4l2/gstv4l2bufferpool.c
@@ -114,7 +114,7 @@
index = meta->vbuffer.index;
GST_LOG_OBJECT (pool,
- "mmap buffer %p idx %d (data %p, len %u) freed, unmapping", buffer,
+ "unmap buffer %p idx %d (data %p, len %u)", buffer,
index, meta->mem, meta->vbuffer.length);
v4l2_munmap (meta->mem, meta->vbuffer.length);
@@ -190,24 +190,36 @@
/* add metadata to raw video buffers */
if (pool->add_videometa && info->finfo) {
+ const GstVideoFormatInfo *finfo = info->finfo;
gsize offset[GST_VIDEO_MAX_PLANES];
- gint stride[GST_VIDEO_MAX_PLANES];
+ gint width, height, n_planes, offs, i, stride[GST_VIDEO_MAX_PLANES];
- offset[0] = 0;
- stride[0] = obj->bytesperline;
+ width = GST_VIDEO_INFO_WIDTH (info);
+ height = GST_VIDEO_INFO_HEIGHT (info);
+ n_planes = GST_VIDEO_INFO_N_PLANES (info);
- GST_DEBUG_OBJECT (pool, "adding video meta, stride %d", stride[0]);
+ GST_DEBUG_OBJECT (pool, "adding video meta, bytesperline %d",
+ obj->bytesperline);
+
+ offs = 0;
+ for (i = 0; i < n_planes; i++) {
+ offset[i] = offs;
+ stride[i] =
+ GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, i, obj->bytesperline);
+
+ offs +=
+ stride[i] * GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (finfo, i, height);
+ }
gst_buffer_add_video_meta_full (newbuf, GST_VIDEO_FRAME_FLAG_NONE,
- GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info),
- GST_VIDEO_INFO_HEIGHT (info), GST_VIDEO_INFO_N_PLANES (info),
+ GST_VIDEO_INFO_FORMAT (info), width, height, n_planes,
offset, stride);
}
break;
}
case GST_V4L2_IO_USERPTR:
default:
+ newbuf = NULL;
g_assert_not_reached ();
- break;
}
pool->num_allocated++;
@@ -344,9 +356,9 @@
pool->num_buffers = num_buffers;
pool->copy_threshold = copy_threshold;
if (pool->allocator)
- gst_allocator_unref (pool->allocator);
+ gst_object_unref (pool->allocator);
if ((pool->allocator = allocator))
- gst_allocator_ref (allocator);
+ gst_object_ref (allocator);
pool->params = params;
gst_buffer_pool_config_set_params (config, caps, size, min_buffers,
@@ -484,6 +496,7 @@
for (n = 0; n < pool->num_queued; n++) {
gst_v4l2_buffer_pool_free_buffer (bpool, pool->buffers[n]);
}
+ pool->num_queued = 0;
g_free (pool->buffers);
pool->buffers = NULL;
@@ -753,6 +766,7 @@
case GST_V4L2_IO_USERPTR:
default:
+ ret = GST_FLOW_ERROR;
g_assert_not_reached ();
break;
}
@@ -775,12 +789,14 @@
case GST_V4L2_IO_USERPTR:
default:
+ ret = GST_FLOW_ERROR;
g_assert_not_reached ();
break;
}
break;
default:
+ ret = GST_FLOW_ERROR;
g_assert_not_reached ();
break;
}
@@ -874,7 +890,7 @@
if (pool->video_fd >= 0)
v4l2_close (pool->video_fd);
if (pool->allocator)
- gst_allocator_unref (pool->allocator);
+ gst_object_unref (pool->allocator);
g_free (pool->buffers);
G_OBJECT_CLASS (parent_class)->finalize (object);
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index 1e1f9c9..0ff2182 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -1301,6 +1301,7 @@
break;
#endif
default:
+ format = GST_VIDEO_FORMAT_UNKNOWN;
g_assert_not_reached ();
break;
}
@@ -1589,10 +1590,18 @@
gint int_width = width;
gint int_height = height;
- /* interlaced detection using VIDIOC_TRY/S_FMT */
- if (!gst_v4l2_object_get_nearest_size (v4l2object, pixelformat,
- &int_width, &int_height, &interlaced))
- return NULL;
+ if (!strcmp ((char *) v4l2object->vcap.driver, "uvcvideo")) {
+ /*
+ * UVC devices are never interlaced, and doing VIDIOC_TRY_FMT on them
+ * causes expensive and slow USB IO, so don't probe them for interlaced
+ */
+ interlaced = FALSE;
+ } else {
+ /* Interlaced detection using VIDIOC_TRY/S_FMT */
+ if (!gst_v4l2_object_get_nearest_size (v4l2object, pixelformat,
+ &int_width, &int_height, &interlaced))
+ return NULL;
+ }
memset (&ival, 0, sizeof (struct v4l2_frmivalenum));
ival.index = 0;
diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c
index 2730027..a01e5fb 100644
--- a/sys/v4l2/gstv4l2sink.c
+++ b/sys/v4l2/gstv4l2sink.c
@@ -653,8 +653,8 @@
gst_query_add_allocation_pool (query, pool, size, 2, 0);
/* we also support various metadata */
- gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
- gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE);
+ gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
+ gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE, NULL);
if (pool)
gst_object_unref (pool);
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
index 6c56031..dfeb7b7 100644
--- a/sys/v4l2/gstv4l2src.c
+++ b/sys/v4l2/gstv4l2src.c
@@ -609,9 +609,11 @@
gst_buffer_pool_config_set_params (config, caps, size, min, max);
/* if downstream supports video metadata, add this to the pool config */
- if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE))
+ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
+ GST_DEBUG_OBJECT (pool, "activate Video Meta");
gst_buffer_pool_config_add_option (config,
GST_BUFFER_POOL_OPTION_VIDEO_META);
+ }
gst_buffer_pool_set_config (pool, config);
}
diff --git a/sys/waveform/Makefile.in b/sys/waveform/Makefile.in
index 4bd8d26..a6cfef7 100644
--- a/sys/waveform/Makefile.in
+++ b/sys/waveform/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -249,7 +249,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index ded8b1e..809e8a2 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -250,7 +250,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index dcd6ef2..7de3440 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -219,7 +219,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index c6866d3..84b2661 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -48,7 +48,9 @@
endif
if USE_JPEG
-check_jpeg = elements/jpegenc
+check_jpeg = \
+ elements/jpegdec \
+ elements/jpegenc
else
check_jpeg =
endif
@@ -254,11 +256,12 @@
elements_imagefreeze_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_imagefreeze_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_jpegdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GIO_CFLAGS) $(AM_CFLAGS)
+elements_jpegdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GIO_LIBS) $(LDADD)
+
elements_jpegenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_jpegenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
-elements_level_LDADD = $(LDADD) $(LIBM)
-
elements_matroskamux_LDADD = $(GST_BASE_LIBS) $(LDADD) $(LIBM)
elements_multifile_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index a0ca289..76240cd 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -143,7 +143,8 @@
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@USE_FLAC_TRUE@am__EXEEXT_1 = pipelines/flacdec$(EXEEXT)
@USE_GDK_PIXBUF_TRUE@am__EXEEXT_2 = elements/gdkpixbufsink$(EXEEXT)
-@USE_JPEG_TRUE@am__EXEEXT_3 = elements/jpegenc$(EXEEXT)
+@USE_JPEG_TRUE@am__EXEEXT_3 = elements/jpegdec$(EXEEXT) \
+@USE_JPEG_TRUE@ elements/jpegenc$(EXEEXT)
@USE_SOUP_TRUE@am__EXEEXT_4 = elements/souphttpsrc$(EXEEXT)
@USE_SUNAUDIO_TRUE@am__EXEEXT_5 = elements/sunaudio$(EXEEXT)
@USE_TAGLIB_TRUE@am__EXEEXT_6 = elements/id3v2mux$(EXEEXT) \
@@ -367,6 +368,15 @@
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_interleave_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
+elements_jpegdec_SOURCES = elements/jpegdec.c
+elements_jpegdec_OBJECTS = elements_jpegdec-jpegdec.$(OBJEXT)
+elements_jpegdec_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+elements_jpegdec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_jpegdec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
elements_jpegenc_SOURCES = elements/jpegenc.c
elements_jpegenc_OBJECTS = elements_jpegenc-jpegenc.$(OBJEXT)
elements_jpegenc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@@ -377,8 +387,8 @@
-o $@
elements_level_SOURCES = elements/level.c
elements_level_OBJECTS = elements_level-level.$(OBJEXT)
-elements_level_DEPENDENCIES = $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_1)
+elements_level_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_level_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_level_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
@@ -637,12 +647,13 @@
elements/equalizer.c elements/flacparse.c elements/flvdemux.c \
elements/flvmux.c elements/gdkpixbufsink.c elements/icydemux.c \
elements/id3demux.c elements/id3v2mux.c elements/imagefreeze.c \
- elements/interleave.c elements/jpegenc.c elements/level.c \
- elements/matroskamux.c elements/matroskaparse.c \
- elements/mpegaudioparse.c elements/multifile.c \
- elements/qtmux.c elements/rganalysis.c elements/rglimiter.c \
- elements/rgvolume.c elements/rtp-payloading.c \
- elements/rtpbin.c $(elements_rtpbin_buffer_list_SOURCES) \
+ elements/interleave.c elements/jpegdec.c elements/jpegenc.c \
+ elements/level.c elements/matroskamux.c \
+ elements/matroskaparse.c elements/mpegaudioparse.c \
+ elements/multifile.c elements/qtmux.c elements/rganalysis.c \
+ elements/rglimiter.c elements/rgvolume.c \
+ elements/rtp-payloading.c elements/rtpbin.c \
+ $(elements_rtpbin_buffer_list_SOURCES) \
elements/rtpjitterbuffer.c elements/shapewipe.c \
elements/souphttpsrc.c elements/spectrum.c elements/sunaudio.c \
elements/udpsink.c elements/udpsrc.c elements/videocrop.c \
@@ -669,12 +680,13 @@
elements/equalizer.c elements/flacparse.c elements/flvdemux.c \
elements/flvmux.c elements/gdkpixbufsink.c elements/icydemux.c \
elements/id3demux.c elements/id3v2mux.c elements/imagefreeze.c \
- elements/interleave.c elements/jpegenc.c elements/level.c \
- elements/matroskamux.c elements/matroskaparse.c \
- elements/mpegaudioparse.c elements/multifile.c \
- elements/qtmux.c elements/rganalysis.c elements/rglimiter.c \
- elements/rgvolume.c elements/rtp-payloading.c \
- elements/rtpbin.c $(elements_rtpbin_buffer_list_SOURCES) \
+ elements/interleave.c elements/jpegdec.c elements/jpegenc.c \
+ elements/level.c elements/matroskamux.c \
+ elements/matroskaparse.c elements/mpegaudioparse.c \
+ elements/multifile.c elements/qtmux.c elements/rganalysis.c \
+ elements/rglimiter.c elements/rgvolume.c \
+ elements/rtp-payloading.c elements/rtpbin.c \
+ $(elements_rtpbin_buffer_list_SOURCES) \
elements/rtpjitterbuffer.c elements/shapewipe.c \
elements/souphttpsrc.c elements/spectrum.c elements/sunaudio.c \
elements/udpsink.c elements/udpsrc.c elements/videocrop.c \
@@ -765,7 +777,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
@@ -1057,7 +1071,10 @@
@USE_GDK_PIXBUF_FALSE@check_gdkpixbuf =
@USE_GDK_PIXBUF_TRUE@check_gdkpixbuf = elements/gdkpixbufsink
@USE_JPEG_FALSE@check_jpeg =
-@USE_JPEG_TRUE@check_jpeg = elements/jpegenc
+@USE_JPEG_TRUE@check_jpeg = \
+@USE_JPEG_TRUE@ elements/jpegdec \
+@USE_JPEG_TRUE@ elements/jpegenc
+
@USE_SOUP_FALSE@check_soup =
@USE_SOUP_TRUE@check_soup = elements/souphttpsrc
@USE_SUNAUDIO_FALSE@check_sunaudio =
@@ -1149,9 +1166,11 @@
elements_interleave_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
elements_interleave_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
elements_level_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_level_LDADD = $(LDADD) $(LIBM)
+elements_level_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
elements_imagefreeze_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_imagefreeze_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_jpegdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GIO_CFLAGS) $(AM_CFLAGS)
+elements_jpegdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GIO_LIBS) $(LDADD)
elements_jpegenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_jpegenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
elements_matroskamux_LDADD = $(GST_BASE_LIBS) $(LDADD) $(LIBM)
@@ -1367,6 +1386,9 @@
elements/interleave$(EXEEXT): $(elements_interleave_OBJECTS) $(elements_interleave_DEPENDENCIES) $(EXTRA_elements_interleave_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/interleave$(EXEEXT)
$(AM_V_CCLD)$(elements_interleave_LINK) $(elements_interleave_OBJECTS) $(elements_interleave_LDADD) $(LIBS)
+elements/jpegdec$(EXEEXT): $(elements_jpegdec_OBJECTS) $(elements_jpegdec_DEPENDENCIES) $(EXTRA_elements_jpegdec_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/jpegdec$(EXEEXT)
+ $(AM_V_CCLD)$(elements_jpegdec_LINK) $(elements_jpegdec_OBJECTS) $(elements_jpegdec_LDADD) $(LIBS)
elements/jpegenc$(EXEEXT): $(elements_jpegenc_OBJECTS) $(elements_jpegenc_DEPENDENCIES) $(EXTRA_elements_jpegenc_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/jpegenc$(EXEEXT)
$(AM_V_CCLD)$(elements_jpegenc_LINK) $(elements_jpegenc_OBJECTS) $(elements_jpegenc_LDADD) $(LIBS)
@@ -1519,6 +1541,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_gdkpixbufsink-gdkpixbufsink.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_imagefreeze-imagefreeze.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_interleave-interleave.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_jpegdec-jpegdec.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_jpegenc-jpegenc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_level-level.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_multifile-multifile.Po@am__quote@
@@ -2052,6 +2075,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_interleave_CFLAGS) $(CFLAGS) -c -o elements_interleave-interleave.obj `if test -f 'elements/interleave.c'; then $(CYGPATH_W) 'elements/interleave.c'; else $(CYGPATH_W) '$(srcdir)/elements/interleave.c'; fi`
+elements_jpegdec-jpegdec.o: elements/jpegdec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegdec_CFLAGS) $(CFLAGS) -MT elements_jpegdec-jpegdec.o -MD -MP -MF $(DEPDIR)/elements_jpegdec-jpegdec.Tpo -c -o elements_jpegdec-jpegdec.o `test -f 'elements/jpegdec.c' || echo '$(srcdir)/'`elements/jpegdec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_jpegdec-jpegdec.Tpo $(DEPDIR)/elements_jpegdec-jpegdec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/jpegdec.c' object='elements_jpegdec-jpegdec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegdec_CFLAGS) $(CFLAGS) -c -o elements_jpegdec-jpegdec.o `test -f 'elements/jpegdec.c' || echo '$(srcdir)/'`elements/jpegdec.c
+
+elements_jpegdec-jpegdec.obj: elements/jpegdec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegdec_CFLAGS) $(CFLAGS) -MT elements_jpegdec-jpegdec.obj -MD -MP -MF $(DEPDIR)/elements_jpegdec-jpegdec.Tpo -c -o elements_jpegdec-jpegdec.obj `if test -f 'elements/jpegdec.c'; then $(CYGPATH_W) 'elements/jpegdec.c'; else $(CYGPATH_W) '$(srcdir)/elements/jpegdec.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_jpegdec-jpegdec.Tpo $(DEPDIR)/elements_jpegdec-jpegdec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/jpegdec.c' object='elements_jpegdec-jpegdec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegdec_CFLAGS) $(CFLAGS) -c -o elements_jpegdec-jpegdec.obj `if test -f 'elements/jpegdec.c'; then $(CYGPATH_W) 'elements/jpegdec.c'; else $(CYGPATH_W) '$(srcdir)/elements/jpegdec.c'; fi`
+
elements_jpegenc-jpegenc.o: elements/jpegenc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_jpegenc_CFLAGS) $(CFLAGS) -MT elements_jpegenc-jpegenc.o -MD -MP -MF $(DEPDIR)/elements_jpegenc-jpegenc.Tpo -c -o elements_jpegenc-jpegenc.o `test -f 'elements/jpegenc.c' || echo '$(srcdir)/'`elements/jpegenc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_jpegenc-jpegenc.Tpo $(DEPDIR)/elements_jpegenc-jpegenc.Po
diff --git a/tests/check/elements/apev2mux.c b/tests/check/elements/apev2mux.c
index 867899e..8fecc66 100644
--- a/tests/check/elements/apev2mux.c
+++ b/tests/check/elements/apev2mux.c
@@ -328,7 +328,7 @@
GST_LOG ("Got tags: %" GST_PTR_FORMAT, tags_read);
test_taglib_apev2mux_check_tags (tags_read, mask);
- gst_tag_list_free (tags_read);
+ gst_tag_list_unref (tags_read);
GST_LOG ("Waiting for EOS ...");
msg = gst_bus_poll (bus, GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
@@ -367,7 +367,7 @@
/* internal consistency check */
tags = test_taglib_apev2mux_create_tags (0xFFFFFFFF);
test_taglib_apev2mux_check_tags (tags, 0xFFFFFFFF);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
/* now the real tests */
for (i = 0; i < 50; ++i) {
@@ -390,7 +390,7 @@
test_taglib_apev2mux_with_tags (tags, mask);
/* free tags */
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
}
diff --git a/tests/check/elements/deinterlace.c b/tests/check/elements/deinterlace.c
index ee67002..258c875 100644
--- a/tests/check/elements/deinterlace.c
+++ b/tests/check/elements/deinterlace.c
@@ -431,6 +431,13 @@
suite_add_tcase (s, tc_chain);
tcase_set_timeout (tc_chain, 180);
+
+ if (!gst_registry_check_feature_version (gst_registry_get (), "deinterlace",
+ GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO)) {
+ GST_ERROR ("FIXME: port deinterlace element");
+ return s;
+ }
+
tcase_add_test (tc_chain, test_create_and_unref);
tcase_add_test (tc_chain, test_mode_auto_accept_caps);
tcase_add_test (tc_chain, test_mode_forced_accept_caps);
diff --git a/tests/check/elements/flvdemux.c b/tests/check/elements/flvdemux.c
index f16a6aa..efc3061 100644
--- a/tests/check/elements/flvdemux.c
+++ b/tests/check/elements/flvdemux.c
@@ -73,7 +73,7 @@
/* kids, don't use a sync handler for this at home, really; we do because
* we just want to abort and nothing else */
- gst_bus_set_sync_handler (bus, error_cb, (gpointer) file);
+ gst_bus_set_sync_handler (bus, error_cb, (gpointer) file, NULL);
src = gst_element_factory_make ("filesrc", "filesrc");
fail_unless (src != NULL, "Failed to create 'filesrc' element!");
diff --git a/tests/check/elements/flvmux.c b/tests/check/elements/flvmux.c
index a9b2bd1..e608535 100644
--- a/tests/check/elements/flvmux.c
+++ b/tests/check/elements/flvmux.c
@@ -66,7 +66,7 @@
/* kids, don't use a sync handler for this at home, really; we do because
* we just want to abort and nothing else */
- gst_bus_set_sync_handler (GST_ELEMENT_BUS (pipeline), error_cb, NULL);
+ gst_bus_set_sync_handler (GST_ELEMENT_BUS (pipeline), error_cb, NULL, NULL);
src = gst_element_factory_make ("audiotestsrc", "audiotestsrc");
fail_unless (src != NULL, "Failed to create 'audiotestsrc' element!");
diff --git a/tests/check/elements/icydemux.c b/tests/check/elements/icydemux.c
index 266497d..4c8155a 100644
--- a/tests/check/elements/icydemux.c
+++ b/tests/check/elements/icydemux.c
@@ -186,7 +186,7 @@
fail_unless_equals_string (TEST_METADATA, (char *) tag);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
gst_message_unref (message);
gst_caps_unref (caps);
diff --git a/tests/check/elements/id3demux.c b/tests/check/elements/id3demux.c
index b907da4..c1ec12e 100644
--- a/tests/check/elements/id3demux.c
+++ b/tests/check/elements/id3demux.c
@@ -56,7 +56,7 @@
/* kids, don't use a sync handler for this at home, really; we do because
* we just want to abort and nothing else */
- gst_bus_set_sync_handler (bus, error_cb, (gpointer) file);
+ gst_bus_set_sync_handler (bus, error_cb, (gpointer) file, NULL);
src = gst_element_factory_make ("filesrc", "filesrc");
fail_unless (src != NULL, "Failed to create 'filesrc' element!");
@@ -124,7 +124,7 @@
tags = read_tags_from_file (filename, FALSE);
fail_unless (tags != NULL, "Failed to extract tags from '%s'", filename);
check_func (tags, filename);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
/* FIXME: need to fix id3demux for short content in push mode */
#if 0
@@ -132,7 +132,7 @@
tags = read_tags_from_file (filename, TRUE);
fail_unless (tags != NULL, "Failed to extract tags from '%s'", filename);
check_func (tags, filename);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
#endif
}
diff --git a/tests/check/elements/id3v2mux.c b/tests/check/elements/id3v2mux.c
index 5fce509..9c9beea 100644
--- a/tests/check/elements/id3v2mux.c
+++ b/tests/check/elements/id3v2mux.c
@@ -434,7 +434,7 @@
GST_LOG ("Got tags: %" GST_PTR_FORMAT, tags_read);
test_taglib_id3mux_check_tags (tags_read, mask);
- gst_tag_list_free (tags_read);
+ gst_tag_list_unref (tags_read);
fail_unless (tagbuf != NULL);
test_taglib_id3mux_check_tag_buffer (tagbuf, mask);
@@ -477,7 +477,7 @@
/* internal consistency check */
tags = test_taglib_id3mux_create_tags (0xFFFFFFFF);
test_taglib_id3mux_check_tags (tags, 0xFFFFFFFF);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
/* now the real tests */
for (i = 0; i < 50; ++i) {
@@ -500,7 +500,7 @@
test_taglib_id3mux_with_tags (tags, mask);
/* free tags */
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
}
diff --git a/tests/check/elements/interleave.c b/tests/check/elements/interleave.c
index 5f30097..1c8c71f 100644
--- a/tests/check/elements/interleave.c
+++ b/tests/check/elements/interleave.c
@@ -456,17 +456,17 @@
if (n == 0) {
GstAudioChannelPosition pos[2] =
{ GST_AUDIO_CHANNEL_POSITION_NONE, GST_AUDIO_CHANNEL_POSITION_NONE };
- gst_audio_channel_positions_to_mask (pos, 2, &mask);
+ gst_audio_channel_positions_to_mask (pos, 2, FALSE, &mask);
} else if (n == 1) {
GstAudioChannelPosition pos[2] = { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
};
- gst_audio_channel_positions_to_mask (pos, 2, &mask);
+ gst_audio_channel_positions_to_mask (pos, 2, FALSE, &mask);
} else if (n == 2) {
GstAudioChannelPosition pos[2] = { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
GST_AUDIO_CHANNEL_POSITION_REAR_CENTER
};
- gst_audio_channel_positions_to_mask (pos, 2, &mask);
+ gst_audio_channel_positions_to_mask (pos, 2, FALSE, &mask);
}
caps = gst_caps_new_simple ("audio/x-raw",
diff --git a/tests/check/elements/jpegdec.c b/tests/check/elements/jpegdec.c
new file mode 100644
index 0000000..070ccdd
--- /dev/null
+++ b/tests/check/elements/jpegdec.c
@@ -0,0 +1,156 @@
+/* GStreamer
+ * unit test for jpegdec
+ * Copyright (C) <2010> Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ * Copyright (C) <2012> Mathias Hasselmann <mathias@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gio/gio.h>
+#include <gst/check/gstcheck.h>
+#include <gst/app/gstappsink.h>
+#include <gst/pbutils/gstdiscoverer.h>
+
+/* Verify jpegdec is working when explictly requested by a pipeline. */
+GST_START_TEST (test_jpegdec_explicit)
+{
+ GstElement *pipeline, *source, *dec, *sink;
+ GstSample *sample;
+
+ /* construct a pipeline that explicitly uses jpegdec */
+ pipeline = gst_pipeline_new (NULL);
+ source = gst_element_factory_make ("filesrc", NULL);
+ dec = gst_element_factory_make ("jpegdec", NULL);
+ sink = gst_element_factory_make ("appsink", NULL);
+
+ gst_bin_add_many (GST_BIN (pipeline), source, dec, sink, NULL);
+ gst_element_link_many (source, dec, sink, NULL);
+
+ /* point that pipeline to our test image */
+ {
+ char *filename = g_build_filename (GST_TEST_FILES_PATH, "image.jpg", NULL);
+ g_object_set (G_OBJECT (source), "location", filename, NULL);
+ g_free (filename);
+ }
+
+ gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+ sample = gst_app_sink_pull_sample (GST_APP_SINK (sink));
+ fail_unless (GST_IS_SAMPLE (sample));
+
+ /* do some basic checks to verify image decoding */
+ {
+ GstCaps *decoded;
+ GstCaps *expected;
+
+ decoded = gst_sample_get_caps (sample);
+ expected = gst_caps_from_string ("video/x-raw, width=120, height=160");
+
+ fail_unless (gst_caps_is_always_compatible (decoded, expected));
+
+ gst_caps_unref (expected);
+ }
+ gst_sample_unref (sample);
+
+ /* wait for EOS */
+ sample = gst_app_sink_pull_sample (GST_APP_SINK (sink));
+ fail_unless (sample == NULL);
+ fail_unless (gst_app_sink_is_eos (GST_APP_SINK (sink)));
+
+ gst_element_set_state (pipeline, GST_STATE_NULL);
+ gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+/* Verify JPEG discovery is working. Right now jpegdec would be used,
+ * but I have no idea how to actually verify this. */
+GST_START_TEST (test_jpegdec_discover)
+{
+ GstDiscoverer *disco;
+ GError *error = NULL;
+ char *uri;
+ GstDiscovererInfo *info;
+ GstDiscovererVideoInfo *video;
+
+ disco = gst_discoverer_new (5 * GST_SECOND, &error);
+
+ fail_unless (GST_IS_DISCOVERER (disco));
+ fail_unless (error == NULL, "%s", (error ? error->message : ""));
+
+ {
+ GFile *testdir = g_file_new_for_path (GST_TEST_FILES_PATH);
+ GFile *testfile = g_file_resolve_relative_path (testdir, "image.jpg");
+ uri = g_file_get_uri (testfile);
+ g_object_unref (testfile);
+ g_object_unref (testdir);
+ }
+
+ info = gst_discoverer_discover_uri (disco, uri, &error);
+ fail_unless (GST_IS_DISCOVERER_INFO (info));
+ fail_unless (error == NULL, "%s: %s", uri, (error ? error->message : ""));
+
+ fail_unless_equals_string (gst_discoverer_info_get_uri (info), uri);
+ fail_unless_equals_int (gst_discoverer_info_get_result (info),
+ GST_DISCOVERER_OK);
+
+ video =
+ GST_DISCOVERER_VIDEO_INFO (gst_discoverer_info_get_stream_info (info));
+ fail_unless (video != NULL);
+
+ fail_unless (gst_discoverer_video_info_is_image (video));
+ fail_unless_equals_int (gst_discoverer_video_info_get_width (video), 120);
+ fail_unless_equals_int (gst_discoverer_video_info_get_height (video), 160);
+
+ gst_discoverer_info_unref (video);
+ gst_discoverer_info_unref (info);
+ g_free (uri);
+ g_object_unref (disco);
+}
+
+GST_END_TEST;
+
+static Suite *
+jpegdec_suite (void)
+{
+ Suite *s = suite_create ("jpegdec");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_jpegdec_explicit);
+ tcase_add_test (tc_chain, test_jpegdec_discover);
+
+ return s;
+}
+
+int
+main (int argc, char **argv)
+{
+ int nf;
+
+ Suite *s = jpegdec_suite ();
+ SRunner *sr = srunner_create (s);
+
+ gst_check_init (&argc, &argv);
+
+ srunner_run_all (sr, CK_NORMAL);
+ nf = srunner_ntests_failed (sr);
+ srunner_free (sr);
+
+ return nf;
+}
diff --git a/tests/check/elements/qtmux.c b/tests/check/elements/qtmux.c
index e367634..cc36a89 100644
--- a/tests/check/elements/qtmux.c
+++ b/tests/check/elements/qtmux.c
@@ -768,7 +768,7 @@
gst_message_parse_tag (msg, &tags);
gst_tag_list_insert (*taglist, tags, GST_TAG_MERGE_REPLACE);
- gst_tag_list_free (tags);
+ gst_tag_list_unref (tags);
}
gst_message_unref (msg);
}
@@ -858,7 +858,7 @@
(guint) gst_util_uint64_scale_round ((guint64) total_bytes,
(guint64) 8 * GST_SECOND, (guint64) total_duration);
fail_unless (bitrate == expected);
- gst_tag_list_free (taglist);
+ gst_tag_list_unref (taglist);
}
/* delete file */
diff --git a/tests/check/elements/rganalysis.c b/tests/check/elements/rganalysis.c
index daad236..aaebd6d 100644
--- a/tests/check/elements/rganalysis.c
+++ b/tests/check/elements/rganalysis.c
@@ -195,14 +195,42 @@
}
static void
+send_flush_events (GstElement * element)
+{
+ gboolean res;
+ GstPad *pad;
+
+ pad = gst_element_get_static_pad (element, "sink");
+ res = gst_pad_send_event (pad, gst_event_new_flush_start ());
+ fail_unless (res, "flush-start even not handledt");
+ res = gst_pad_send_event (pad, gst_event_new_flush_stop (TRUE));
+ fail_unless (res, "flush-stop event not handled");
+ gst_object_unref (pad);
+}
+
+static void
+send_segment_event (GstElement * element)
+{
+ GstSegment segment;
+ gboolean res;
+ GstPad *pad;
+
+ pad = gst_element_get_static_pad (element, "sink");
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ res = gst_pad_send_event (pad, gst_event_new_segment (&segment));
+ fail_unless (res, "SEGMENT event not handled");
+ gst_object_unref (pad);
+}
+
+static void
send_eos_event (GstElement * element)
{
GstBus *bus = gst_element_get_bus (element);
GstPad *pad = gst_element_get_static_pad (element, "sink");
- GstEvent *event = gst_event_new_eos ();
+ gboolean res;
- fail_unless (gst_pad_send_event (pad, event),
- "Cannot send EOS event: Not handled.");
+ res = gst_pad_send_event (pad, gst_event_new_eos ());
+ fail_unless (res, "EOS event not handled");
/* There is no sink element, so _we_ post the EOS message on the bus here. Of
* course we generate any EOS ourselves, but this allows us to poll for the
@@ -218,7 +246,7 @@
send_tag_event (GstElement * element, GstTagList * tag_list)
{
GstPad *pad = gst_element_get_static_pad (element, "sink");
- GstEvent *event = gst_event_new_tag ("test", tag_list);
+ GstEvent *event = gst_event_new_tag (tag_list);
fail_unless (gst_pad_send_event (pad, event),
"Cannot send TAG event: Not handled.");
@@ -649,20 +677,27 @@
set_playing_state (element);
/* Single track: */
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
/* First album: */
g_object_set (element, "num-tracks", 3, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 2);
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 1);
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 0);
@@ -670,15 +705,21 @@
/* Second album: */
g_object_set (element, "num-tracks", 2, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 1);
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 0);
/* Single track: */
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 0);
@@ -700,6 +741,7 @@
/* No buffer for the first track. */
+ send_segment_event (element);
send_eos_event (element);
/* No tags should be posted, there was nothing to analyze: */
poll_eos (element);
@@ -707,6 +749,8 @@
/* A test waveform with known gain result as second track: */
+ send_flush_events (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_square_float_mono (&accumulator, 44100, 512,
0.25));
@@ -716,11 +760,13 @@
fail_unless_track_gain (tag_list, -6.20);
/* Album is not finished yet: */
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
/* No buffer for the last track. */
+ send_flush_events (element);
+ send_segment_event (element);
send_eos_event (element);
tag_list = poll_tags (element);
@@ -728,7 +774,7 @@
fail_unless_album_gain (tag_list, -6.20);
/* No track tags should be posted, as there was no data for it: */
fail_if_track_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 0);
cleanup_rganalysis (element);
@@ -743,6 +789,7 @@
set_playing_state (element);
/* Single track: */
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
send_eos_event (element);
poll_eos (element);
@@ -750,11 +797,15 @@
/* First album: */
g_object_set (element, "num-tracks", 2, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 1);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
send_eos_event (element);
poll_eos (element);
@@ -762,12 +813,16 @@
/* Second album, with a single track: */
g_object_set (element, "num-tracks", 1, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
send_eos_event (element);
poll_eos (element);
fail_unless_num_tracks (element, 0);
/* Single track: */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (44100, 0, 0.0, 0.0));
send_eos_event (element);
poll_eos (element);
@@ -794,25 +849,30 @@
GstTagList *tag_list;
set_playing_state (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 512, -1.369, 0.0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.369);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Swapped channels. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 512, 0.0, -1.369));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.369);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Mono. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_mono (8000, 512, -1.369));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.369);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -827,46 +887,57 @@
set_playing_state (element);
/* Half amplitude. */
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 1 << 14, 0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Swapped channels. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, 1 << 14));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Mono. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_mono (8000, 16, 512, 1 << 14));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Half amplitude, negative variant. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, -1 << 14, 0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Swapped channels. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, -1 << 14));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Mono. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_mono (8000, 16, 512, -1 << 14));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Now check for correct normalization of the peak value: Sample
@@ -874,47 +945,59 @@
* highest positive amplitude we do not reach 1.0, only for
* -32768! */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 32767, 0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 32767. / 32768.);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Swapped channels. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, 32767));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 32767. / 32768.);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Mono. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_mono (8000, 16, 512, 32767));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 32767. / 32768.);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Negative variant, reaching 1.0. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, -32768, 0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.0);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Swapped channels. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_stereo (8000, 16, 512, 0, -32768));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.0);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
/* Mono. */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_int16_mono (8000, 16, 512, -32768));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.0);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -929,57 +1012,68 @@
g_object_set (element, "num-tracks", 2, NULL);
set_playing_state (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 1.0, 0.0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.0);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.0, 0.5));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
fail_unless_album_peak (tag_list, 1.0);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 0);
/* Try a second album: */
g_object_set (element, "num-tracks", 3, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.4, 0.4));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.4);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 2);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.45, 0.45));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.45);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.2, 0.2));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.2);
fail_unless_album_peak (tag_list, 0.45);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 0);
/* And now a single track, not in album mode (num-tracks is 0
* now): */
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.1, 0.1));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.1);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -995,20 +1089,23 @@
set_playing_state (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_mono (8000, 1024, 1.0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.0);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
g_object_set (element, "num-tracks", 1, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_mono (8000, 1024, 0.5));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
fail_unless_album_peak (tag_list, 0.5);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 0);
cleanup_rganalysis (element);
@@ -1029,22 +1126,25 @@
g_object_set (element, "num-tracks", 2, NULL);
set_playing_state (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 1.0, 0.0));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 1.0);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
g_object_set (element, "num-tracks", 0, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
push_buffer (test_buffer_const_float_stereo (8000, 1024, 0.0, 0.5));
send_eos_event (element);
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.5);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1063,7 +1163,7 @@
/* The three tracks are constructed such that if any of these is in fact
* ignored for the album gain, the album gain will differ. */
-
+ send_segment_event (element);
accumulator = 0;
for (i = 8; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1073,8 +1173,10 @@
fail_unless_track_peak (tag_list, 0.75);
fail_unless_track_gain (tag_list, -15.70);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 12; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1084,8 +1186,10 @@
fail_unless_track_peak (tag_list, 0.5);
fail_unless_track_gain (tag_list, -12.22);
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 180; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1099,7 +1203,7 @@
/* Strangely, wavegain reports -12.17 for the album, but the fixed
* metaflac agrees to us. Could be a 32767 vs. 32768 issue. */
fail_unless_album_gain (tag_list, -12.18);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1118,6 +1222,7 @@
g_object_set (element, "forced", FALSE, NULL);
set_playing_state (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
/* Provided values are totally arbitrary. */
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1132,6 +1237,8 @@
/* Now back to a track without tags. */
+ send_flush_events (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
0.25, 0.25));
@@ -1139,7 +1246,7 @@
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (44100));
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1158,6 +1265,7 @@
g_object_set (element, "forced", FALSE, NULL);
set_playing_state (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_GAIN, 2.21,
NULL);
@@ -1176,7 +1284,8 @@
poll_eos (element);
/* Now a track without tags. */
-
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1186,7 +1295,7 @@
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (44100));
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1209,6 +1318,7 @@
g_object_set (element, "forced", FALSE, NULL);
set_playing_state (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_const_float_stereo (8000, 512, 0.5, 0.5));
@@ -1220,6 +1330,8 @@
send_eos_event (element);
poll_eos (element);
+ send_flush_events (element);
+ send_segment_event (element);
/* Now back to a normal track, this one has no tags: */
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
@@ -1228,7 +1340,7 @@
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (8000));
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1248,6 +1360,7 @@
g_object_set (element, "forced", FALSE, NULL);
set_playing_state (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
/* Provided values are totally arbitrary. */
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1265,6 +1378,8 @@
/* Now an album without tags. */
g_object_set (element, "num-tracks", 2, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1274,9 +1389,11 @@
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (44100));
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1287,7 +1404,7 @@
fail_unless_track_gain (tag_list, get_expected_gain (44100));
fail_unless_album_peak (tag_list, 0.25);
fail_unless_album_gain (tag_list, get_expected_gain (44100));
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 0);
cleanup_rganalysis (element);
@@ -1305,6 +1422,7 @@
g_object_set (element, "forced", FALSE, "num-tracks", 2, NULL);
set_playing_state (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
/* Provided values are totally arbitrary. */
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1321,6 +1439,8 @@
/* This track has no tags, but needs to be skipped anyways since we
* are in album processing mode. */
+ send_flush_events (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_const_float_stereo (8000, 512, 0.0, 0.0));
send_eos_event (element);
@@ -1328,6 +1448,8 @@
fail_unless_num_tracks (element, 0);
/* Normal track after the album. Of course not to be skipped. */
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
@@ -1337,7 +1459,7 @@
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (8000));
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1354,6 +1476,7 @@
g_object_set (element, "forced", FALSE, "num-tracks", 2, NULL);
set_playing_state (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
0.25));
@@ -1362,11 +1485,13 @@
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (8000));
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
/* The second track has indeed full tags, but although being not forced, this
* one has to be processed because album processing is on. */
+ send_flush_events (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
/* Provided values are totally arbitrary. */
gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
@@ -1385,7 +1510,7 @@
/* Statistical processing leads to the second track being
* ignored for the gain (because it is so short): */
fail_unless_album_gain (tag_list, get_expected_gain (8000));
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 0);
cleanup_rganalysis (element);
@@ -1403,6 +1528,7 @@
g_object_set (element, "forced", FALSE, "num-tracks", 2, NULL);
set_playing_state (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 8000, 512, 0.25,
0.25));
@@ -1411,12 +1537,15 @@
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, get_expected_gain (8000));
fail_if_album_tags (tag_list);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
fail_unless_num_tracks (element, 1);
/* Disabling album processing before end of album: */
g_object_set (element, "num-tracks", 0, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
+
/* Processing a track that has to be skipped. */
tag_list = gst_tag_list_new_empty ();
/* Provided values are totally arbitrary. */
@@ -1444,6 +1573,7 @@
set_playing_state (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
0.25, 0.25));
@@ -1455,10 +1585,12 @@
fail_unless (gst_tag_list_get_double (tag_list, GST_TAG_REFERENCE_LEVEL,
&ref_level) && MATCH_GAIN (ref_level, 89.),
"Incorrect reference level tag");
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
g_object_set (element, "reference-level", 83., "num-tracks", 2, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
0.25, 0.25));
@@ -1470,8 +1602,10 @@
fail_unless (gst_tag_list_get_double (tag_list, GST_TAG_REFERENCE_LEVEL,
&ref_level) && MATCH_GAIN (ref_level, 83.),
"Incorrect reference level tag");
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (i = 20; i--;)
push_buffer (test_buffer_square_float_stereo (&accumulator, 44100, 512,
@@ -1487,7 +1621,7 @@
fail_unless (gst_tag_list_get_double (tag_list, GST_TAG_REFERENCE_LEVEL,
&ref_level) && MATCH_GAIN (ref_level, 83.),
"Incorrect reference level tag");
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
cleanup_rganalysis (element);
}
@@ -1503,6 +1637,8 @@
set_playing_state (element);
for (i = G_N_ELEMENTS (supported_rates); i--;) {
+ send_flush_events (element);
+ send_segment_event (element);
accumulator = 0;
for (j = 0; j < 4; j++)
push_buffer (test_buffer_square_float_stereo (&accumulator,
@@ -1520,7 +1656,7 @@
tag_list = poll_tags (element);
fail_unless_track_peak (tag_list, 0.25);
fail_unless_track_gain (tag_list, supported_rates[i].gain);
- gst_tag_list_free (tag_list);
+ gst_tag_list_unref (tag_list);
}
cleanup_rganalysis (element);
@@ -1551,7 +1687,7 @@
fail_unless_track_peak (tag_list, 0.25); \
fail_unless_track_gain (tag_list, \
get_expected_gain (sample_rate)); \
- gst_tag_list_free (tag_list); \
+ gst_tag_list_unref (tag_list); \
\
cleanup_rganalysis (element); \
} \
@@ -1576,7 +1712,7 @@
fail_unless_track_peak (tag_list, 0.25); \
fail_unless_track_gain (tag_list, \
get_expected_gain (sample_rate)); \
- gst_tag_list_free (tag_list); \
+ gst_tag_list_unref (tag_list); \
\
cleanup_rganalysis (element); \
} \
@@ -1602,7 +1738,7 @@
fail_unless_track_peak (tag_list, 0.25); \
fail_unless_track_gain (tag_list, \
get_expected_gain (sample_rate)); \
- gst_tag_list_free (tag_list); \
+ gst_tag_list_unref (tag_list); \
\
cleanup_rganalysis (element); \
} \
@@ -1628,7 +1764,7 @@
fail_unless_track_peak (tag_list, 0.25); \
fail_unless_track_gain (tag_list, \
get_expected_gain (sample_rate)); \
- gst_tag_list_free (tag_list); \
+ gst_tag_list_unref (tag_list); \
\
cleanup_rganalysis (element); \
} \
diff --git a/tests/check/elements/rgvolume.c b/tests/check/elements/rgvolume.c
index 25c6fac..4c09d55 100644
--- a/tests/check/elements/rgvolume.c
+++ b/tests/check/elements/rgvolume.c
@@ -25,7 +25,7 @@
#include <math.h>
-GList *events = NULL;
+static GList *events = NULL;
/* For ease of programming we use globals to keep refs for our floating src and
* sink pads we create; otherwise we always have to do get_pad, get_peer, and
@@ -164,6 +164,43 @@
}
static void
+clear_last_event (GstEventType type)
+{
+ GList *last = g_list_last (events);
+
+ fail_unless (last != NULL);
+ fail_unless_equals_int (GST_EVENT_TYPE (last->data), type);
+ gst_event_unref (GST_EVENT (last->data));
+ events = g_list_delete_link (events, last);
+}
+
+static void
+send_flush_events (GstElement * element)
+{
+ gboolean res;
+
+ res = gst_pad_push_event (mysrcpad, gst_event_new_flush_start ());
+ fail_unless (res, "flush-start even not handled");
+ clear_last_event (GST_EVENT_FLUSH_START);
+
+ res = gst_pad_push_event (mysrcpad, gst_event_new_flush_stop (TRUE));
+ fail_unless (res, "flush-stop event not handled");
+ clear_last_event (GST_EVENT_FLUSH_STOP);
+}
+
+static void
+send_segment_event (GstElement * element)
+{
+ GstSegment segment;
+ gboolean res;
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ res = gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment));
+ fail_unless (res, "SEGMENT event not handled");
+ clear_last_event (GST_EVENT_SEGMENT);
+}
+
+static void
send_eos_event (GstElement * element)
{
GstEvent *event = gst_event_new_eos ();
@@ -349,7 +386,7 @@
GST_TAG_TRACK_GAIN, +4.95, GST_TAG_TRACK_PEAK, 0.59463,
GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
GST_TAG_ARTIST, "Foobar", NULL);
- event = gst_event_new_tag ("test", tag_list);
+ event = gst_event_new_tag (tag_list);
new_event = send_tag_event (element, event);
gst_event_parse_tag (new_event, &tag_list);
fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
@@ -364,7 +401,7 @@
GST_TAG_TRACK_GAIN, +4.95, GST_TAG_TRACK_PEAK, 0.59463,
GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
GST_TAG_ARTIST, "Foobar", NULL);
- event = gst_event_new_tag ("test", tag_list);
+ event = gst_event_new_tag (tag_list);
new_event = send_tag_event (element, event);
gst_event_parse_tag (new_event, &tag_list);
fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
@@ -392,19 +429,20 @@
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
GST_TAG_ALBUM_GAIN, +2.09, GST_TAG_ALBUM_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_gain (element, -9.45); /* pre-amp + track gain */
send_eos_event (element);
g_object_set (element, "album-mode", TRUE, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
+
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
GST_TAG_ALBUM_GAIN, +2.09, GST_TAG_ALBUM_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_gain (element, -3.91); /* pre-amp + album gain */
/* Switching back to track mode in the middle of a stream: */
@@ -436,12 +474,13 @@
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +3.5, GST_TAG_TRACK_PEAK, 1.0,
GST_TAG_ALBUM_GAIN, -0.5, GST_TAG_ALBUM_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_gain (element, -2.50); /* pre-amp + track gain */
send_eos_event (element);
/* Now a track completely missing tags. */
+ send_flush_events (element);
+ send_segment_event (element);
fail_unless_gain (element, -9.00); /* pre-amp + fallback-gain */
@@ -453,6 +492,8 @@
/* Verify that result gain is set to +0.00 with pre-amp + fallback-gain >
* +0.00 and no headroom. */
+ send_flush_events (element);
+ send_segment_event (element);
g_object_set (element, "fallback-gain", +12.00, "headroom", +0.00, NULL);
fail_unless_target_gain (element, +6.00); /* pre-amp + fallback-gain */
@@ -481,8 +522,7 @@
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +2.11, GST_TAG_TRACK_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_gain (element, -3.89); /* pre-amp + track gain */
send_eos_event (element);
@@ -509,8 +549,7 @@
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_ALBUM_GAIN, +3.73, GST_TAG_ALBUM_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_gain (element, -2.27); /* pre-amp + album gain */
send_eos_event (element);
@@ -534,29 +573,32 @@
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +3.50, GST_TAG_TRACK_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_target_gain (element, +3.50); /* pre-amp + track gain */
fail_unless_result_gain (element, +0.00);
send_eos_event (element);
+ send_flush_events (element);
+ send_segment_event (element);
+
g_object_set (element, "headroom", +2.00, NULL);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +9.18, GST_TAG_TRACK_PEAK, 0.687149, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_target_gain (element, +9.18); /* pre-amp + track gain */
/* Result is 20. * log10 (1. / peak) + headroom. */
fail_unless_result_gain (element, 5.2589816238303335);
send_eos_event (element);
+ send_flush_events (element);
+ send_segment_event (element);
+
g_object_set (element, "album-mode", TRUE, NULL);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_ALBUM_GAIN, +5.50, GST_TAG_ALBUM_PEAK, 1.0, NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_target_gain (element, +5.50); /* pre-amp + album gain */
fail_unless_result_gain (element, +2.00); /* headroom */
send_eos_event (element);
@@ -582,8 +624,7 @@
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, 0.00, GST_TAG_TRACK_PEAK, 0.2,
GST_TAG_REFERENCE_LEVEL, 83., NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
/* Because our authorative reference is 89 dB, we bump it up by +6 dB. */
fail_unless_gain (element, +6.00); /* pre-amp + track gain */
send_eos_event (element);
@@ -591,14 +632,15 @@
g_object_set (element, "album-mode", TRUE, NULL);
/* Same as above, but with album gain. */
+ send_flush_events (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, 1.23, GST_TAG_TRACK_PEAK, 0.1,
GST_TAG_ALBUM_GAIN, 0.00, GST_TAG_ALBUM_PEAK, 0.2,
GST_TAG_REFERENCE_LEVEL, 83., NULL);
- fail_unless (send_tag_event (element, gst_event_new_tag ("test",
- tag_list)) == NULL);
+ fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
fail_unless_gain (element, +6.00); /* pre-amp + album gain */
cleanup_rgvolume (element);
diff --git a/tests/check/elements/rtp-payloading.c b/tests/check/elements/rtp-payloading.c
index ab3fbab..7b04502 100644
--- a/tests/check/elements/rtp-payloading.c
+++ b/tests/check/elements/rtp-payloading.c
@@ -478,8 +478,28 @@
GST_START_TEST (rtp_h263p)
{
rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
- rtp_h263p_frame_count, "video/x-h263,variant=(string)itu", "rtph263ppay",
- "rtph263pdepay", 0, 0, FALSE);
+ rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+ "h263version=(string)h263", "rtph263ppay", "rtph263pdepay", 0, 0, FALSE);
+
+ /* payloader should accept any input that matches the template caps
+ * if there's just a udpsink or fakesink downstream */
+ rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
+ rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+ "h263version=(string)h263", "rtph263ppay", "identity", 0, 0, FALSE);
+
+ /* default output of avenc_h263p */
+ rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
+ rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+ "h263version=(string)h263p, annex-f=(boolean)true, "
+ "annex-j=(boolean)true, annex-i=(boolean)true, annex-t=(boolean)true",
+ "rtph263ppay", "identity", 0, 0, FALSE);
+
+ /* pay ! depay should also work with any input */
+ rtp_pipeline_test (rtp_h263p_frame_data, rtp_h263p_frame_data_size,
+ rtp_h263p_frame_count, "video/x-h263,variant=(string)itu,"
+ "h263version=(string)h263p, annex-f=(boolean)true, "
+ "annex-j=(boolean)true, annex-i=(boolean)true, annex-t=(boolean)true",
+ "rtph263ppay", "rtph263pdepay", 0, 0, FALSE);
}
GST_END_TEST;
diff --git a/tests/check/pipelines/tagschecking.c b/tests/check/pipelines/tagschecking.c
index dc4b11c..00a0068 100644
--- a/tests/check/pipelines/tagschecking.c
+++ b/tests/check/pipelines/tagschecking.c
@@ -55,10 +55,10 @@
ntl = gst_tag_list_merge (received_tags, tl, GST_TAG_MERGE_PREPEND);
if (ntl) {
GST_LOG ("taglists merged: %" GST_PTR_FORMAT, ntl);
- gst_tag_list_free (received_tags);
+ gst_tag_list_unref (received_tags);
received_tags = ntl;
}
- gst_tag_list_free (tl);
+ gst_tag_list_unref (tl);
}
}
break;
@@ -115,7 +115,7 @@
sent_tags = gst_tag_list_new_from_string (tag_str);
fail_unless (sent_tags != NULL);
gst_tag_setter_merge_tags (setter, sent_tags, GST_TAG_MERGE_REPLACE);
- gst_tag_list_free (sent_tags);
+ gst_tag_list_unref (sent_tags);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop);
@@ -155,7 +155,7 @@
GST_DEBUG ("testing tags : %s", tag_str);
if (received_tags) {
- gst_tag_list_free (received_tags);
+ gst_tag_list_unref (received_tags);
received_tags = NULL;
}
@@ -232,9 +232,9 @@
fail_unless (found, "tag item %s is lost", name_sent);
}
- gst_tag_list_free (received_tags);
+ gst_tag_list_unref (received_tags);
received_tags = NULL;
- gst_tag_list_free (sent_tags);
+ gst_tag_list_unref (sent_tags);
gst_element_set_state (pipeline, GST_STATE_NULL);
@@ -288,7 +288,7 @@
}
test_tags (COMMON_TAGS, H264_CAPS, "qtmux", "qtdemux");
test_tags (COMMON_TAGS, H264_CAPS, "mp4mux", "qtdemux");
- test_tags (COMMON_TAGS, H264_CAPS, "gppmux", "qtdemux");
+ test_tags (COMMON_TAGS, H264_CAPS, "3gppmux", "qtdemux");
}
GST_END_TEST;
@@ -310,7 +310,7 @@
}
test_tags (GEO_LOCATION_TAGS, H264_CAPS, "qtmux", "qtdemux");
test_tags (GEO_LOCATION_TAGS, H264_CAPS, "mp4mux", "qtdemux");
- test_tags (GEO_LOCATION_TAGS, H264_CAPS, "gppmux", "qtdemux");
+ test_tags (GEO_LOCATION_TAGS, H264_CAPS, "3gppmux", "qtdemux");
}
GST_END_TEST;
@@ -329,7 +329,7 @@
test_tags (USER_TAGS, H264_CAPS, "qtmux", "qtdemux");
test_tags (USER_TAGS, H264_CAPS, "mp4mux", "qtdemux");
- test_tags (USER_TAGS, H264_CAPS, "gppmux", "qtdemux");
+ test_tags (USER_TAGS, H264_CAPS, "3gppmux", "qtdemux");
}
GST_END_TEST;
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index c02599e..2f171fb 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -225,7 +225,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/audiofx/Makefile.in b/tests/examples/audiofx/Makefile.in
index a72a6ac..cf4240f 100644
--- a/tests/examples/audiofx/Makefile.in
+++ b/tests/examples/audiofx/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -230,7 +230,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/cairo/Makefile.in b/tests/examples/cairo/Makefile.in
index 99c52e9..450210a 100644
--- a/tests/examples/cairo/Makefile.in
+++ b/tests/examples/cairo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/equalizer/Makefile.in b/tests/examples/equalizer/Makefile.in
index 522a4f9..c0a9ad1 100644
--- a/tests/examples/equalizer/Makefile.in
+++ b/tests/examples/equalizer/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/equalizer/demo.c b/tests/examples/equalizer/demo.c
index fe0e513..46db870 100644
--- a/tests/examples/equalizer/demo.c
+++ b/tests/examples/equalizer/demo.c
@@ -177,7 +177,7 @@
appwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (appwindow), "destroy",
G_CALLBACK (on_window_destroy), NULL);
- vbox = gtk_vbox_new (FALSE, 6);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
drawingarea = gtk_drawing_area_new ();
gtk_widget_set_size_request (drawingarea, spect_bands, spect_height);
@@ -185,7 +185,7 @@
G_CALLBACK (on_configure_event), (gpointer) spectrum);
gtk_box_pack_start (GTK_BOX (vbox), drawingarea, TRUE, TRUE, 0);
- hbox = gtk_hbox_new (FALSE, 20);
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
for (i = 0; i < NBANDS; i++) {
GObject *band;
@@ -205,9 +205,10 @@
frame = gtk_frame_new (label);
g_free (label);
- scales_hbox = gtk_hbox_new (FALSE, 6);
+ scales_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- widget = gtk_vscale_new_with_range (-24.0, 12.0, 0.5);
+ widget = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+ -24.0, 12.0, 0.5);
gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
gtk_range_set_value (GTK_RANGE (widget), gain);
@@ -216,7 +217,8 @@
G_CALLBACK (on_gain_changed), (gpointer) band);
gtk_box_pack_start (GTK_BOX (scales_hbox), widget, FALSE, FALSE, 0);
- widget = gtk_vscale_new_with_range (0.0, 20000.0, 5.0);
+ widget = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+ 0.0, 20000.0, 5.0);
gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
gtk_range_set_value (GTK_RANGE (widget), bw);
@@ -225,7 +227,8 @@
G_CALLBACK (on_bandwidth_changed), (gpointer) band);
gtk_box_pack_start (GTK_BOX (scales_hbox), widget, TRUE, TRUE, 0);
- widget = gtk_vscale_new_with_range (20.0, 20000.0, 5.0);
+ widget = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
+ 20.0, 20000.0, 5.0);
gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
gtk_range_set_value (GTK_RANGE (widget), freq);
diff --git a/tests/examples/jack/Makefile.in b/tests/examples/jack/Makefile.in
index 0dc4ec9..36c1a84 100644
--- a/tests/examples/jack/Makefile.in
+++ b/tests/examples/jack/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -215,7 +215,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/level/Makefile.in b/tests/examples/level/Makefile.in
index 9c5a356..6f14141 100644
--- a/tests/examples/level/Makefile.in
+++ b/tests/examples/level/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/pulse/Makefile.in b/tests/examples/pulse/Makefile.in
index 2bbc952..e5aa75d 100644
--- a/tests/examples/pulse/Makefile.in
+++ b/tests/examples/pulse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/rtp/Makefile.in b/tests/examples/rtp/Makefile.in
index 2b662f6..a6781dc 100644
--- a/tests/examples/rtp/Makefile.in
+++ b/tests/examples/rtp/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -228,7 +228,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/shapewipe/Makefile.in b/tests/examples/shapewipe/Makefile.in
index d343d01..dc47c11 100644
--- a/tests/examples/shapewipe/Makefile.in
+++ b/tests/examples/shapewipe/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -221,7 +221,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/spectrum/Makefile.in b/tests/examples/spectrum/Makefile.in
index d5f62cc..e2624e9 100644
--- a/tests/examples/spectrum/Makefile.in
+++ b/tests/examples/spectrum/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -238,7 +238,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/examples/spectrum/demo-audiotest.c b/tests/examples/spectrum/demo-audiotest.c
index 1095d75..4b5cc00 100644
--- a/tests/examples/spectrum/demo-audiotest.c
+++ b/tests/examples/spectrum/demo-audiotest.c
@@ -192,7 +192,7 @@
clock_id =
gst_clock_new_single_shot_id (sync_clock, waittime + basetime);
gst_clock_id_wait_async (clock_id, delayed_spectrum_update,
- (gpointer) spect);
+ (gpointer) spect, NULL);
gst_clock_id_unref (clock_id);
}
}
@@ -239,9 +239,9 @@
appwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (appwindow), "destroy",
G_CALLBACK (on_window_destroy), NULL);
- vbox = gtk_vbox_new (FALSE, 6);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- hbox = gtk_hbox_new (FALSE, 6);
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
widget = gtk_check_button_new_with_label ("Fast");
g_signal_connect (G_OBJECT (widget), "toggled",
G_CALLBACK (on_fast_slow_mode_changed), (gpointer) spectrum);
@@ -251,7 +251,8 @@
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- widget = gtk_hscale_new_with_range (50.0, 20000.0, 10);
+ widget = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
+ 50.0, 20000.0, 10);
gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE);
gtk_scale_set_value_pos (GTK_SCALE (widget), GTK_POS_TOP);
gtk_range_set_value (GTK_RANGE (widget), 440.0);
diff --git a/tests/examples/spectrum/demo-osssrc.c b/tests/examples/spectrum/demo-osssrc.c
index f8fee78..9eeb6c6 100644
--- a/tests/examples/spectrum/demo-osssrc.c
+++ b/tests/examples/spectrum/demo-osssrc.c
@@ -145,7 +145,7 @@
clock_id =
gst_clock_new_single_shot_id (sync_clock, waittime + basetime);
gst_clock_id_wait_async (clock_id, delayed_spectrum_update,
- (gpointer) spect);
+ (gpointer) spect, NULL);
gst_clock_id_unref (clock_id);
}
}
diff --git a/tests/examples/v4l2/Makefile.in b/tests/examples/v4l2/Makefile.in
index 5a0d09f..d0db3e3 100644
--- a/tests/examples/v4l2/Makefile.in
+++ b/tests/examples/v4l2/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -216,7 +216,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 0607f5a..4f66e14 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -180,7 +180,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index 548e346..c28910b 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -285,7 +285,9 @@
GIO_LIBS = @GIO_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GLIB_PREFIX = @GLIB_PREFIX@
GLIB_REQ = @GLIB_REQ@
GMSGFMT = @GMSGFMT@
diff --git a/tests/icles/gdkpixbufsink-test.c b/tests/icles/gdkpixbufsink-test.c
index a09d9f1..376f67f 100644
--- a/tests/icles/gdkpixbufsink-test.c
+++ b/tests/icles/gdkpixbufsink-test.c
@@ -283,14 +283,14 @@
g_signal_connect (info->win, "delete-event", G_CALLBACK (gtk_main_quit),
NULL);
- vbox = gtk_vbox_new (FALSE, 6);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
gtk_container_add (GTK_CONTAINER (info->win), vbox);
info->img = gtk_image_new ();
gtk_box_pack_start (GTK_BOX (vbox), info->img, FALSE, FALSE, 6);
- hbox = gtk_hbox_new (FALSE, 6);
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 6);
info->accurate_cb = gtk_check_button_new_with_label ("accurate seek "
@@ -299,7 +299,8 @@
g_signal_connect (info->accurate_cb, "toggled",
G_CALLBACK (accurate_toggled_cb), info);
- info->slider = gtk_hscale_new_with_range (0.0, 1.0, 0.001);
+ info->slider = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
+ 0.0, 1.0, 0.001);
gtk_box_pack_start (GTK_BOX (vbox), info->slider, FALSE, FALSE, 6);
g_signal_connect (info->slider, "value-changed",
G_CALLBACK (slider_cb), info);
diff --git a/tests/icles/ximagesrc-test.c b/tests/icles/ximagesrc-test.c
index a01bf65..12ec0dc 100644
--- a/tests/icles/ximagesrc-test.c
+++ b/tests/icles/ximagesrc-test.c
@@ -37,9 +37,7 @@
main (int argc, char **argv)
{
GstElement *pipeline;
-#ifndef G_DISABLE_ASSERT
- GstState state, pending;
-#endif
+ GstState state;
GError *error = NULL;
gst_init (&argc, &argv);
@@ -55,9 +53,11 @@
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* lets check it gets to PLAYING */
- g_assert (gst_element_get_state (pipeline, &state, &pending,
- GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_FAILURE);
- g_assert (state == GST_STATE_PLAYING || pending == GST_STATE_PLAYING);
+ if (gst_element_get_state (pipeline, &state, NULL,
+ GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_FAILURE ||
+ state != GST_STATE_PLAYING) {
+ g_warning ("State change to playing failed");
+ }
/* We want to get out after 5 seconds */
g_timeout_add (5000, (GSourceFunc) terminate_playback, pipeline);
diff --git a/win32/MANIFEST b/win32/MANIFEST
index cf63177..b3b879f 100644
--- a/win32/MANIFEST
+++ b/win32/MANIFEST
@@ -2,6 +2,12 @@
win32/common/config.h
win32/common/gstudp-enumtypes.c
win32/common/gstudp-enumtypes.h
+win32/common/gstrtpbin-marshal.c
+win32/common/gstrtpbin-marshal.h
+win32/common/tuner-enumtypes.c
+win32/common/tuner-enumtypes.h
+win32/common/tuner-marshal.c
+win32/common/tuner-marshal.h
win32/vs6/gst_plugins_good.dsw
win32/vs6/autogen.dsp
win32/vs6/libgstalaw.dsp
diff --git a/win32/common/config.h b/win32/common/config.h
index 96a3156..29bb487 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -58,7 +58,7 @@
#define GST_PACKAGE_ORIGIN "Unknown package origin"
/* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2012-06-07"
+#define GST_PACKAGE_RELEASE_DATETIME "2012-08-08"
/* struct v4l2_buffer missing */
#undef GST_V4L2_MISSING_BUFDECL
@@ -366,7 +366,7 @@
#define PACKAGE_NAME "GStreamer Good Plug-ins"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Good Plug-ins 0.11.92"
+#define PACKAGE_STRING "GStreamer Good Plug-ins 0.11.93"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gst-plugins-good"
@@ -375,7 +375,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
-#define PACKAGE_VERSION "0.11.92"
+#define PACKAGE_VERSION "0.11.93"
/* directory where plugins are located */
#ifdef _DEBUG
@@ -409,7 +409,7 @@
#undef TARGET_CPU
/* Version number of package */
-#define VERSION "0.11.92"
+#define VERSION "0.11.93"
/* old wavpack API */
#undef WAVPACK_OLD_API
diff --git a/win32/common/gstrtpbin-marshal.c b/win32/common/gstrtpbin-marshal.c
new file mode 100644
index 0000000..bbea5a4
--- /dev/null
+++ b/win32/common/gstrtpbin-marshal.c
@@ -0,0 +1,424 @@
+#include "gstrtpbin-marshal.h"
+
+#include <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* UINT:UINT (gstrtpbin-marshal.list:1) */
+void
+gst_rtp_bin_marshal_UINT__UINT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef guint (*GMarshalFunc_UINT__UINT) (gpointer data1,
+ guint arg_1, gpointer data2);
+ register GMarshalFunc_UINT__UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ guint v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 2);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_UINT__UINT) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_uint (param_values + 1), data2);
+
+ g_value_set_uint (return_value, v_return);
+}
+
+/* BOXED:UINT (gstrtpbin-marshal.list:2) */
+void
+gst_rtp_bin_marshal_BOXED__UINT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef gpointer (*GMarshalFunc_BOXED__UINT) (gpointer data1,
+ guint arg_1, gpointer data2);
+ register GMarshalFunc_BOXED__UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ gpointer v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 2);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_BOXED__UINT) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_uint (param_values + 1), data2);
+
+ g_value_take_boxed (return_value, v_return);
+}
+
+/* BOXED:UINT,UINT (gstrtpbin-marshal.list:3) */
+void
+gst_rtp_bin_marshal_BOXED__UINT_UINT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef gpointer (*GMarshalFunc_BOXED__UINT_UINT) (gpointer data1,
+ guint arg_1, guint arg_2, gpointer data2);
+ register GMarshalFunc_BOXED__UINT_UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ gpointer v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_BOXED__UINT_UINT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_uint (param_values + 2), data2);
+
+ g_value_take_boxed (return_value, v_return);
+}
+
+/* OBJECT:UINT (gstrtpbin-marshal.list:4) */
+void
+gst_rtp_bin_marshal_OBJECT__UINT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef GObject *(*GMarshalFunc_OBJECT__UINT) (gpointer data1,
+ guint arg_1, gpointer data2);
+ register GMarshalFunc_OBJECT__UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ GObject *v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 2);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_OBJECT__UINT) (marshal_data ? marshal_data : cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_uint (param_values + 1), data2);
+
+ g_value_take_object (return_value, v_return);
+}
+
+/* VOID:UINT,OBJECT (gstrtpbin-marshal.list:5) */
+void
+gst_rtp_bin_marshal_VOID__UINT_OBJECT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__UINT_OBJECT) (gpointer data1,
+ guint arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__UINT_OBJECT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__UINT_OBJECT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_object (param_values + 2), data2);
+}
+
+/* VOID:UINT (gstrtpbin-marshal.list:6) */
+
+/* VOID:UINT,UINT (gstrtpbin-marshal.list:7) */
+void
+gst_rtp_bin_marshal_VOID__UINT_UINT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
+ guint arg_1, guint arg_2, gpointer data2);
+ register GMarshalFunc_VOID__UINT_UINT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_uint (param_values + 2), data2);
+}
+
+/* VOID:OBJECT,OBJECT (gstrtpbin-marshal.list:8) */
+void
+gst_rtp_bin_marshal_VOID__OBJECT_OBJECT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1,
+ gpointer arg_1, gpointer arg_2, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_OBJECT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_object (param_values + 1),
+ g_marshal_value_peek_object (param_values + 2), data2);
+}
+
+/* UINT64:BOOL,UINT64 (gstrtpbin-marshal.list:9) */
+void
+gst_rtp_bin_marshal_UINT64__BOOLEAN_UINT64 (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef guint64 (*GMarshalFunc_UINT64__BOOLEAN_UINT64) (gpointer data1,
+ gboolean arg_1, guint64 arg_2, gpointer data2);
+ register GMarshalFunc_UINT64__BOOLEAN_UINT64 callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ guint64 v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_UINT64__BOOLEAN_UINT64) (marshal_data ? marshal_data :
+ cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_boolean (param_values + 1),
+ g_marshal_value_peek_uint64 (param_values + 2), data2);
+
+ g_value_set_uint64 (return_value, v_return);
+}
+
+/* VOID:UINT64 (gstrtpbin-marshal.list:10) */
+void
+gst_rtp_bin_marshal_VOID__UINT64 (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__UINT64) (gpointer data1,
+ guint64 arg_1, gpointer data2);
+ register GMarshalFunc_VOID__UINT64 callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 2);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__UINT64) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1, g_marshal_value_peek_uint64 (param_values + 1), data2);
+}
+
+/* BOOL:BOXED,BOOL (gstrtpbin-marshal.list:11) */
+void
+gst_rtp_bin_marshal_BOOLEAN__BOXED_BOOLEAN (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_BOOLEAN) (gpointer data1,
+ gpointer arg_1, gboolean arg_2, gpointer data2);
+ register GMarshalFunc_BOOLEAN__BOXED_BOOLEAN callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+ gboolean v_return;
+
+ g_return_if_fail (return_value != NULL);
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_BOOLEAN__BOXED_BOOLEAN) (marshal_data ? marshal_data :
+ cc->callback);
+
+ v_return = callback (data1,
+ g_marshal_value_peek_boxed (param_values + 1),
+ g_marshal_value_peek_boolean (param_values + 2), data2);
+
+ g_value_set_boolean (return_value, v_return);
+}
+
+/* VOID:UINT,UINT,UINT,UINT,BOXED (gstrtpbin-marshal.list:12) */
+void
+gst_rtp_bin_marshal_VOID__UINT_UINT_UINT_UINT_BOXED (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT_UINT_BOXED) (gpointer data1,
+ guint arg_1,
+ guint arg_2, guint arg_3, guint arg_4, gpointer arg_5, gpointer data2);
+ register GMarshalFunc_VOID__UINT_UINT_UINT_UINT_BOXED callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 6);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__UINT_UINT_UINT_UINT_BOXED) (marshal_data ?
+ marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_uint (param_values + 1),
+ g_marshal_value_peek_uint (param_values + 2),
+ g_marshal_value_peek_uint (param_values + 3),
+ g_marshal_value_peek_uint (param_values + 4),
+ g_marshal_value_peek_boxed (param_values + 5), data2);
+}
diff --git a/win32/common/gstrtpbin-marshal.h b/win32/common/gstrtpbin-marshal.h
new file mode 100644
index 0000000..5a9a196
--- /dev/null
+++ b/win32/common/gstrtpbin-marshal.h
@@ -0,0 +1,105 @@
+
+#ifndef __gst_rtp_bin_marshal_MARSHAL_H__
+#define __gst_rtp_bin_marshal_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* UINT:UINT (gstrtpbin-marshal.list:1) */
+extern void gst_rtp_bin_marshal_UINT__UINT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* BOXED:UINT (gstrtpbin-marshal.list:2) */
+extern void gst_rtp_bin_marshal_BOXED__UINT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* BOXED:UINT,UINT (gstrtpbin-marshal.list:3) */
+extern void gst_rtp_bin_marshal_BOXED__UINT_UINT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* OBJECT:UINT (gstrtpbin-marshal.list:4) */
+extern void gst_rtp_bin_marshal_OBJECT__UINT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* VOID:UINT,OBJECT (gstrtpbin-marshal.list:5) */
+extern void gst_rtp_bin_marshal_VOID__UINT_OBJECT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* VOID:UINT (gstrtpbin-marshal.list:6) */
+#define gst_rtp_bin_marshal_VOID__UINT g_cclosure_marshal_VOID__UINT
+
+/* VOID:UINT,UINT (gstrtpbin-marshal.list:7) */
+extern void gst_rtp_bin_marshal_VOID__UINT_UINT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* VOID:OBJECT,OBJECT (gstrtpbin-marshal.list:8) */
+extern void gst_rtp_bin_marshal_VOID__OBJECT_OBJECT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* UINT64:BOOL,UINT64 (gstrtpbin-marshal.list:9) */
+extern void gst_rtp_bin_marshal_UINT64__BOOLEAN_UINT64 (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+#define gst_rtp_bin_marshal_UINT64__BOOL_UINT64 gst_rtp_bin_marshal_UINT64__BOOLEAN_UINT64
+
+/* VOID:UINT64 (gstrtpbin-marshal.list:10) */
+extern void gst_rtp_bin_marshal_VOID__UINT64 (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* BOOL:BOXED,BOOL (gstrtpbin-marshal.list:11) */
+extern void gst_rtp_bin_marshal_BOOLEAN__BOXED_BOOLEAN (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+#define gst_rtp_bin_marshal_BOOL__BOXED_BOOL gst_rtp_bin_marshal_BOOLEAN__BOXED_BOOLEAN
+
+/* VOID:UINT,UINT,UINT,UINT,BOXED (gstrtpbin-marshal.list:12) */
+extern void gst_rtp_bin_marshal_VOID__UINT_UINT_UINT_UINT_BOXED (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+G_END_DECLS
+
+#endif /* __gst_rtp_bin_marshal_MARSHAL_H__ */
+
diff --git a/win32/common/tuner-enumtypes.c b/win32/common/tuner-enumtypes.c
new file mode 100644
index 0000000..32a3e17
--- /dev/null
+++ b/win32/common/tuner-enumtypes.c
@@ -0,0 +1,28 @@
+
+
+
+#include "tuner-enumtypes.h"
+
+#include "tuner.h"
+#include "tunernorm.h"
+#include "tunerchannel.h"
+
+/* enumerations from "tunerchannel.h" */
+GType
+gst_tuner_channel_flags_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+ if (g_once_init_enter (&g_define_type_id__volatile)) {
+ static const GFlagsValue values[] = {
+ {GST_TUNER_CHANNEL_INPUT, "GST_TUNER_CHANNEL_INPUT", "input"},
+ {GST_TUNER_CHANNEL_OUTPUT, "GST_TUNER_CHANNEL_OUTPUT", "output"},
+ {GST_TUNER_CHANNEL_FREQUENCY, "GST_TUNER_CHANNEL_FREQUENCY", "frequency"},
+ {GST_TUNER_CHANNEL_AUDIO, "GST_TUNER_CHANNEL_AUDIO", "audio"},
+ {0, NULL, NULL}
+ };
+ GType g_define_type_id =
+ g_flags_register_static ("GstTunerChannelFlags", values);
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+ return g_define_type_id__volatile;
+}
diff --git a/win32/common/tuner-enumtypes.h b/win32/common/tuner-enumtypes.h
new file mode 100644
index 0000000..e9b9b7a
--- /dev/null
+++ b/win32/common/tuner-enumtypes.h
@@ -0,0 +1,19 @@
+
+
+
+#ifndef __GST_INTERFACES_ENUM_TYPES_H__
+#define __GST_INTERFACES_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "tunerchannel.h" */
+GType gst_tuner_channel_flags_get_type (void);
+#define GST_TYPE_TUNER_CHANNEL_FLAGS (gst_tuner_channel_flags_get_type())
+G_END_DECLS
+
+#endif /* __GST_INTERFACES_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/common/tuner-marshal.c b/win32/common/tuner-marshal.c
new file mode 100644
index 0000000..7e2cfcf
--- /dev/null
+++ b/win32/common/tuner-marshal.c
@@ -0,0 +1,115 @@
+#include "tuner-marshal.h"
+
+#include <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:OBJECT,ULONG (tuner-marshal.list:1) */
+void
+gst_interfaces_marshal_VOID__OBJECT_ULONG (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__OBJECT_ULONG) (gpointer data1,
+ gpointer arg_1, gulong arg_2, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_ULONG callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__OBJECT_ULONG) (marshal_data ? marshal_data :
+ cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_object (param_values + 1),
+ g_marshal_value_peek_ulong (param_values + 2), data2);
+}
+
+/* VOID:OBJECT,INT (tuner-marshal.list:2) */
+void
+gst_interfaces_marshal_VOID__OBJECT_INT (GClosure * closure,
+ GValue * return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue * param_values,
+ gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__OBJECT_INT) (gpointer data1,
+ gpointer arg_1, gint arg_2, gpointer data2);
+ register GMarshalFunc_VOID__OBJECT_INT callback;
+ register GCClosure *cc = (GCClosure *) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ } else {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback =
+ (GMarshalFunc_VOID__OBJECT_INT) (marshal_data ? marshal_data :
+ cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_object (param_values + 1),
+ g_marshal_value_peek_int (param_values + 2), data2);
+}
diff --git a/win32/common/tuner-marshal.h b/win32/common/tuner-marshal.h
new file mode 100644
index 0000000..8217545
--- /dev/null
+++ b/win32/common/tuner-marshal.h
@@ -0,0 +1,28 @@
+
+#ifndef __gst_interfaces_marshal_MARSHAL_H__
+#define __gst_interfaces_marshal_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* VOID:OBJECT,ULONG (tuner-marshal.list:1) */
+extern void gst_interfaces_marshal_VOID__OBJECT_ULONG (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+/* VOID:OBJECT,INT (tuner-marshal.list:2) */
+extern void gst_interfaces_marshal_VOID__OBJECT_INT (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+G_END_DECLS
+
+#endif /* __gst_interfaces_marshal_MARSHAL_H__ */
+