diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-08-09 11:25:39 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-08-09 11:25:39 +0200 |
commit | c167d67e1cc2c9f9ff50fa06757b1cd246a71383 (patch) | |
tree | 0eae34a1c108743f8818c87fb3d5064497fb5fab | |
parent | 1e844f15ece858283240e17ddd58140e6bb7e975 (diff) |
Imported Upstream version 0.11.93upstream/0.11.93
194 files changed, 1861 insertions, 4762 deletions
diff --git a/Makefile.in b/Makefile.in index 9505b8f..ed6d5c9 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, @@ -243,7 +243,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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@ @@ -796,7 +798,7 @@ distcheck: dist *.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) @@ -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 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [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 @@ m4_define([_AM_AUTOCONF_VERSION], []) # 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 6b2e2d9..d1b82b6 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, @@ -207,7 +207,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/Makefile.in b/common/m4/Makefile.in index ddd027d..0e4480c 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, @@ -167,7 +167,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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 @@ dnl defines HOST_CPU 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 @@ AC_DEFUN([AG_GST_GLIB_CHECK], 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 @@ AC_DEFUN([AG_GST_FLEX_CHECK], 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 sets up use of GStreamer configure.ac macros 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 @@ -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 @@ func_file_conv () 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 @@ func_cl_wrapper () ;; 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) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + 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" + 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 @@ -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 @@ case $os in -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 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + hexagon-*) + os=-elf + ;; tic54x-*) os=-coff ;; @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GStreamer Ugly Plug-ins 0.11.92. +# Generated by GNU Autoconf 2.69 for GStreamer Ugly Plug-ins 0.11.93. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>. # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GStreamer Ugly Plug-ins' PACKAGE_TARNAME='gst-plugins-ugly' -PACKAGE_VERSION='0.11.92' -PACKAGE_STRING='GStreamer Ugly Plug-ins 0.11.92' +PACKAGE_VERSION='0.11.93' +PACKAGE_STRING='GStreamer Ugly Plug-ins 0.11.93' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -691,8 +691,6 @@ USE_A52DEC_TRUE A52DEC_LIBS A52DEC_CFLAGS WIN32_LIBS -USE_PLUGIN_SYNAESTHESIA_FALSE -USE_PLUGIN_SYNAESTHESIA_TRUE USE_PLUGIN_REALMEDIA_FALSE USE_PLUGIN_REALMEDIA_TRUE USE_PLUGIN_XINGMUX_FALSE @@ -745,6 +743,8 @@ GIO_LDFLAGS GIO_LIBS GIO_CFLAGS GLIB_EXTRA_CFLAGS +GLIB_MKENUMS +GLIB_GENMARSHAL GLIB_LIBS GLIB_CFLAGS GLIB_REQ @@ -814,10 +814,6 @@ HAVE_CPU_PPC_FALSE 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 @@ -914,14 +910,6 @@ AM_BACKSLASH 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 @@ -953,6 +941,18 @@ am__isrc 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 @@ -1041,7 +1041,6 @@ enable_dvdlpcmdec enable_dvdsub enable_xingmux enable_realmedia -enable_synaesthesia enable_a52dec with_a52dec_prefix enable_amrnb @@ -1641,7 +1640,7 @@ if test "$ac_init_help" = "long"; then # 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 Ugly Plug-ins 0.11.92 to adapt to many kinds of systems. +\`configure' configures GStreamer Ugly Plug-ins 0.11.93 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1713,7 +1712,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer Ugly Plug-ins 0.11.92:";; + short | recursive ) echo "Configuration of GStreamer Ugly Plug-ins 0.11.93:";; esac cat <<\_ACEOF @@ -1757,7 +1756,6 @@ Optional Features: --disable-dvdsub disable dependency-less dvdsub plugin --disable-xingmux disable dependency-less xingmux plugin --disable-realmedia disable dependency-less realmedia plugin - --disable-synaesthesia disable dependency-less synaesthesia plugin --disable-a52dec disable a52dec: a52dec --disable-amrnb disable amrnb library: amrnb --disable-amrwb disable amrwb library: amrwbdec @@ -1936,7 +1934,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer Ugly Plug-ins configure 0.11.92 +GStreamer Ugly Plug-ins configure 0.11.93 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2842,7 +2840,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GStreamer Ugly Plug-ins $as_me 0.11.92, which was +It was created by GStreamer Ugly Plug-ins $as_me 0.11.93, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3192,12 +3190,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -am__api_version='1.11' - ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then @@ -3227,6 +3219,122 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. 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: @@ -3663,7 +3771,7 @@ fi # Define the identity of the package. PACKAGE='gst-plugins-ugly' - VERSION='0.11.92' + VERSION='0.11.93' cat >>confdefs.h <<_ACEOF @@ -3786,9 +3894,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; } - 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) @@ -3799,7 +3907,7 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; } { $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 @@ -3851,76 +3959,6 @@ fi -# 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. @@ -6163,10 +6201,6 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -6205,7 +6239,7 @@ irix5* | irix6* | nonstopux*) ;; # 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 ;; @@ -9443,7 +9477,7 @@ lt_prog_compiler_static= 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*) @@ -11613,17 +11647,6 @@ freebsd* | dragonfly*) 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 @@ -11740,7 +11763,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # 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 @@ -12788,8 +12811,8 @@ CC="$lt_save_CC" -GST_REQ=0.11.91 -GSTPB_REQ=0.11.91 +GST_REQ=0.11.93 +GSTPB_REQ=0.11.93 @@ -15515,46 +15538,6 @@ fi -{ $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) @@ -18401,9 +18384,6 @@ fi 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 @@ -18565,7 +18545,7 @@ fi 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 @@ -19425,7 +19405,7 @@ lt_prog_compiler_static_CXX= ;; esac ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler @@ -20297,17 +20277,6 @@ freebsd* | dragonfly*) 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 @@ -20424,7 +20393,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # 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 @@ -22345,7 +22314,7 @@ _ACEOF -GLIB_REQ=2.31.14 +GLIB_REQ=2.32.0 @@ -22502,6 +22471,84 @@ fi 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` @@ -22627,7 +22674,7 @@ _ACEOF - ORC_REQ=0.4.6 + ORC_REQ=0.4.16 # Check whether --enable-orc was given. if test "${enable_orc+set}" = set; then : @@ -24629,49 +24676,6 @@ fi - GST_PLUGINS_ALL="$GST_PLUGINS_ALL synaesthesia" - - - - # Check whether --enable-synaesthesia was given. -if test "${enable_synaesthesia+set}" = set; then : - enableval=$enable_synaesthesia; - case "${enableval}" in - yes) gst_use_synaesthesia=yes ;; - no) gst_use_synaesthesia=no ;; - *) as_fn_error $? "bad value ${enableval} for --enable-synaesthesia" "$LINENO" 5 ;; - esac - -else - gst_use_synaesthesia=yes -fi - - if test x$gst_use_synaesthesia = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin synaesthesia" >&5 -$as_echo "$as_me: disabling dependency-less plugin synaesthesia" >&6;} - WITHOUT_PLUGINS="$WITHOUT_PLUGINS synaesthesia" - fi - - - if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " synaesthesia " > /dev/null; then - GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED synaesthesia" - fi - if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " synaesthesia " > /dev/null; then - GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ synaesthesia / /'` - fi - if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " synaesthesia " > /dev/null; then - GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ synaesthesia / /'` - fi - if echo " $GST_PLUGINS_SELECTED " | grep -i " synaesthesia " > /dev/null; then - USE_PLUGIN_SYNAESTHESIA_TRUE= - USE_PLUGIN_SYNAESTHESIA_FALSE='#' -else - USE_PLUGIN_SYNAESTHESIA_TRUE='#' - USE_PLUGIN_SYNAESTHESIA_FALSE= -fi - - - for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" @@ -24690,20 +24694,6 @@ if test "x$HAVE_WINSOCK2_H" = "xyes"; then fi -if test "x$BUILD_EXPERIMENTAL" != "xyes"; then - - GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ synaesthesia / /'` - if false; then - USE_PLUGIN_SYNAESTHESIA_TRUE= - USE_PLUGIN_SYNAESTHESIA_FALSE='#' -else - USE_PLUGIN_SYNAESTHESIA_TRUE='#' - USE_PLUGIN_SYNAESTHESIA_FALSE= -fi - - -fi - if test "x$BUILD_EXTERNAL" = "xyes"; then @@ -26700,7 +26690,7 @@ if test x$USE_X264 = xyes; then HAVE_X264=no - which="x264 >= 0.106.0" + which="x264 >= 0.120.0" required="no" @@ -26961,7 +26951,7 @@ GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^_*gst_plugin_ -ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst/Makefile gst/asfdemux/Makefile gst/dvdlpcmdec/Makefile gst/dvdsub/Makefile gst/realmedia/Makefile gst/synaesthesia/Makefile gst/xingmux/Makefile ext/Makefile ext/a52dec/Makefile ext/amrnb/Makefile ext/amrwbdec/Makefile ext/cdio/Makefile ext/dvdread/Makefile ext/lame/Makefile ext/mad/Makefile ext/mpeg2dec/Makefile ext/sidplay/Makefile ext/twolame/Makefile ext/x264/Makefile docs/Makefile docs/plugins/Makefile docs/version.entities tests/Makefile tests/check/Makefile m4/Makefile po/Makefile.in pkgconfig/Makefile pkgconfig/gstreamer-plugins-ugly-uninstalled.pc gst-plugins-ugly.spec" +ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst/Makefile gst/asfdemux/Makefile gst/dvdlpcmdec/Makefile gst/dvdsub/Makefile gst/realmedia/Makefile gst/xingmux/Makefile ext/Makefile ext/a52dec/Makefile ext/amrnb/Makefile ext/amrwbdec/Makefile ext/cdio/Makefile ext/dvdread/Makefile ext/lame/Makefile ext/mad/Makefile ext/mpeg2dec/Makefile ext/sidplay/Makefile ext/twolame/Makefile ext/x264/Makefile docs/Makefile docs/plugins/Makefile docs/version.entities tests/Makefile tests/check/Makefile m4/Makefile po/Makefile.in pkgconfig/Makefile pkgconfig/gstreamer-plugins-ugly-uninstalled.pc gst-plugins-ugly.spec" sed \ @@ -27282,14 +27272,6 @@ if test -z "${USE_PLUGIN_REALMEDIA_TRUE}" && test -z "${USE_PLUGIN_REALMEDIA_FAL as_fn_error $? "conditional \"USE_PLUGIN_REALMEDIA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${USE_PLUGIN_SYNAESTHESIA_TRUE}" && test -z "${USE_PLUGIN_SYNAESTHESIA_FALSE}"; then - as_fn_error $? "conditional \"USE_PLUGIN_SYNAESTHESIA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${USE_PLUGIN_SYNAESTHESIA_TRUE}" && test -z "${USE_PLUGIN_SYNAESTHESIA_FALSE}"; then - as_fn_error $? "conditional \"USE_PLUGIN_SYNAESTHESIA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${USE_A52DEC_TRUE}" && test -z "${USE_A52DEC_FALSE}"; then as_fn_error $? "conditional \"USE_A52DEC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -27775,7 +27757,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GStreamer Ugly Plug-ins $as_me 0.11.92, which was +This file was extended by GStreamer Ugly Plug-ins $as_me 0.11.93, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -27841,7 +27823,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GStreamer Ugly Plug-ins config.status 0.11.92 +GStreamer Ugly Plug-ins config.status 0.11.93 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -28387,7 +28369,6 @@ do "gst/dvdlpcmdec/Makefile") CONFIG_FILES="$CONFIG_FILES gst/dvdlpcmdec/Makefile" ;; "gst/dvdsub/Makefile") CONFIG_FILES="$CONFIG_FILES gst/dvdsub/Makefile" ;; "gst/realmedia/Makefile") CONFIG_FILES="$CONFIG_FILES gst/realmedia/Makefile" ;; - "gst/synaesthesia/Makefile") CONFIG_FILES="$CONFIG_FILES gst/synaesthesia/Makefile" ;; "gst/xingmux/Makefile") CONFIG_FILES="$CONFIG_FILES gst/xingmux/Makefile" ;; "ext/Makefile") CONFIG_FILES="$CONFIG_FILES ext/Makefile" ;; "ext/a52dec/Makefile") CONFIG_FILES="$CONFIG_FILES ext/a52dec/Makefile" ;; diff --git a/configure.ac b/configure.ac index c3ba492..a810fee 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ dnl please read gstreamer/docs/random/autotools before changing this file dnl initialize autoconf dnl releases only do -Wall, cvs and prerelease does -Werror too dnl use a three digit version number for releases, and four for cvs/prerelease -AC_INIT(GStreamer Ugly Plug-ins, 0.11.92, +AC_INIT(GStreamer Ugly Plug-ins, 0.11.93, http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, gst-plugins-ugly) @@ -47,8 +47,8 @@ AC_DEFINE_UNQUOTED(GST_API_VERSION, "$GST_API_VERSION", 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 **** @@ -149,10 +149,10 @@ AG_GST_CHECK_FUNCTION dnl *** checks for dependency libraries *** dnl GLib is required -GLIB_REQ=2.31.14 +GLIB_REQ=2.32.0 AG_GST_GLIB_CHECK([$GLIB_REQ]) -ORC_CHECK([0.4.6]) +ORC_CHECK([0.4.16]) dnl checks for gstreamer dnl uninstalled is selected preferentially -- see pkg-config(1) @@ -218,7 +218,6 @@ AG_GST_CHECK_PLUGIN(dvdlpcmdec) AG_GST_CHECK_PLUGIN(dvdsub) AG_GST_CHECK_PLUGIN(xingmux) AG_GST_CHECK_PLUGIN(realmedia) -AG_GST_CHECK_PLUGIN(synaesthesia) AC_CHECK_HEADERS([winsock2.h], HAVE_WINSOCK2_H=yes) @@ -227,11 +226,6 @@ if test "x$HAVE_WINSOCK2_H" = "xyes"; then AC_SUBST(WIN32_LIBS) fi -dnl disable experimental plug-ins -if test "x$BUILD_EXPERIMENTAL" != "xyes"; then - AG_GST_DISABLE_PLUGIN(synaesthesia) -fi - dnl *** ext plug-ins *** dnl keep this list sorted alphabetically ! @@ -357,7 +351,7 @@ AG_GST_CHECK_FEATURE(TWOLAME, [twolame], twolame, [ dnl *** x264 (MPEG-4 part 10/h.264/AVC encoder) *** translit(dnm, m, l) AM_CONDITIONAL(USE_X264, true) AG_GST_CHECK_FEATURE(X264, [x264 plug-in], x264, [ - AG_GST_PKG_CHECK_MODULES(X264, x264 >= 0.106.0) + AG_GST_PKG_CHECK_MODULES(X264, x264 >= 0.120.0) ]) else @@ -444,7 +438,6 @@ gst/asfdemux/Makefile gst/dvdlpcmdec/Makefile gst/dvdsub/Makefile gst/realmedia/Makefile -gst/synaesthesia/Makefile gst/xingmux/Makefile ext/Makefile ext/a52dec/Makefile @@ -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 @@ scriptversion=2011-12-04.11; # UTC 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 @@ as side-effects. 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 @@ EOF ;; 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 @@ if test "$depmode" = msvc7msys; then 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 @@ gcc) ## 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 @@ sgi) # 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 @@ sgi) 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 @@ aix) 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 @@ aix) ;; 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 @@ icc) 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 @@ hp2) 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 @@ hp2) 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 @@ tru64) 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 @@ msvc7) 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 @@ dashmstdout) shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -498,15 +520,14 @@ dashmstdout) 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) # 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 @@ cpp) shift fi - # Remove `-o $object'. + # Remove '-o $object'. IFS=" " for arg do @@ -652,8 +672,8 @@ msvisualcpp) 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 4685ccd..282c550 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, @@ -207,7 +207,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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.am b/docs/plugins/Makefile.am index 0c8bff1..2ae298e 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -69,8 +69,7 @@ EXTRA_HFILES = \ $(top_srcdir)/gst/realmedia/rademux.h \ $(top_srcdir)/gst/realmedia/rdtmanager.h \ $(top_srcdir)/gst/realmedia/rmdemux.h \ - $(top_srcdir)/gst/realmedia/rtspreal.h \ - $(top_srcdir)/gst/synaesthesia/gstsynaesthesia.h + $(top_srcdir)/gst/realmedia/rtspreal.h # Images to copy into HTML directory. HTML_IMAGES = diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in index 20d33b5..6345cb5 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, @@ -186,7 +186,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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@ @@ -457,8 +459,7 @@ EXTRA_HFILES = \ $(top_srcdir)/gst/realmedia/rademux.h \ $(top_srcdir)/gst/realmedia/rdtmanager.h \ $(top_srcdir)/gst/realmedia/rmdemux.h \ - $(top_srcdir)/gst/realmedia/rtspreal.h \ - $(top_srcdir)/gst/synaesthesia/gstsynaesthesia.h + $(top_srcdir)/gst/realmedia/rtspreal.h # Images to copy into HTML directory. diff --git a/docs/plugins/gst-plugins-ugly-plugins-docs.sgml b/docs/plugins/gst-plugins-ugly-plugins-docs.sgml index cb475b2..80ca473 100644 --- a/docs/plugins/gst-plugins-ugly-plugins-docs.sgml +++ b/docs/plugins/gst-plugins-ugly-plugins-docs.sgml @@ -31,7 +31,6 @@ <xi:include href="xml/element-rtspwms.xml" /> <xi:include href="xml/element-siddec.xml" /> <xi:include href="xml/element-twolamemp2enc.xml" /> - <xi:include href="xml/element-synaesthesia.xml" /> <xi:include href="xml/element-x264enc.xml" /> <xi:include href="xml/element-xingmux.xml" /> </chapter> @@ -51,7 +50,6 @@ <xi:include href="xml/plugin-mpeg2dec.xml" /> <xi:include href="xml/plugin-realmedia.xml" /> <xi:include href="xml/plugin-siddec.xml" /> - <xi:include href="xml/plugin-synaesthesia.xml" /> <xi:include href="xml/plugin-twolame.xml" /> <xi:include href="xml/plugin-x264.xml" /> </chapter> diff --git a/docs/plugins/gst-plugins-ugly-plugins-sections.txt b/docs/plugins/gst-plugins-ugly-plugins-sections.txt index 2e5ce5d..37c4c2c 100644 --- a/docs/plugins/gst-plugins-ugly-plugins-sections.txt +++ b/docs/plugins/gst-plugins-ugly-plugins-sections.txt @@ -217,20 +217,6 @@ gst_siddec_get_type </SECTION> <SECTION> -<FILE>element-synaesthesia</FILE> -<TITLE>synaesthesia</TITLE> -GstSynaesthesia -<SUBSECTION Standard> -GstSynaesthesiaClass -GST_SYNAESTHESIA -GST_SYNAESTHESIA_CLASS -GST_IS_SYNAESTHESIA -GST_IS_SYNAESTHESIA_CLASS -GST_TYPE_SYNAESTHESIA -gst_synaesthesia_get_type -</SECTION> - -<SECTION> <FILE>element-twolamemp2enc</FILE> <TITLE>twolame</TITLE> GstTwoLame diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html index 53b0df2..5f28f74 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="idp180400"></a>gst-plugins-ugly Elements</h2></div></div></div> +<a name="idp3764480"></a>gst-plugins-ugly Elements</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-a52dec.html">a52dec</a></span><span class="refpurpose"> — Decodes ATSC A/52 encoded audio streams</span> @@ -66,13 +66,10 @@ <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-twolame.html">twolame</a></span><span class="refpurpose"> — High-quality free MP2 encoder</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-synaesthesia.html">synaesthesia</a></span><span class="refpurpose"> — Creates video visualizations of audio input, using stereo and pitch information</span> -</dt> -<dt> <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-x264enc.html">x264enc</a></span><span class="refpurpose"> — H264 Encoder</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-xingmux.html">xingmux</a></span><span class="refpurpose"> — Adds a Xing header to the beginning of a VBR MP3 file</span> +<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-xingmux.html">xingmux</a></span><span class="refpurpose"></span> </dt> </dl></div> </div> diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html index 71e840d..d802a9a 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="idp4162736"></a>gst-plugins-ugly Plugins</h2></div></div></div> +<a name="idp277216"></a>gst-plugins-ugly Plugins</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-a52dec.html">a52dec</a></span><span class="refpurpose"> — <a name="plugin-a52dec"></a>Decodes ATSC A/52 encoded audio streams</span> @@ -63,9 +63,6 @@ <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-siddec.html">siddec</a></span><span class="refpurpose"> — <a name="plugin-siddec"></a>Uses libsidplay to decode .sid files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-synaesthesia.html">synaesthesia</a></span><span class="refpurpose"> — <a name="plugin-synaesthesia"></a>Creates video visualizations of audio input, using stereo and pitch information</span> -</dt> -<dt> <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-twolame.html">twolame</a></span><span class="refpurpose"> — <a name="plugin-twolame"></a>Encode MP2s with TwoLAME</span> </dt> <dt> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-a52dec.html b/docs/plugins/html/gst-plugins-ugly-plugins-a52dec.html index 447505b..313d3a4 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-a52dec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-a52dec.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7841248"></a><h3>Element Information</h3> +<a name="idp5740240"></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="idp5861520"></a><h3>Element Pads</h3> +<a name="idp6145440"></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-ugly-plugins-amrnbdec.html b/docs/plugins/html/gst-plugins-ugly-plugins-amrnbdec.html index e05962e..c6551c4 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-amrnbdec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-amrnbdec.html @@ -66,7 +66,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7062896"></a><h3>Element Information</h3> +<a name="idp7778032"></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="idp9447728"></a><h3>Element Pads</h3> +<a name="idp7830432"></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-ugly-plugins-amrnbenc.html b/docs/plugins/html/gst-plugins-ugly-plugins-amrnbenc.html index c4dd3df..d5d8a55 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-amrnbenc.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-amrnbenc.html @@ -74,7 +74,7 @@ GstAmrnbEnc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8720928"></a><h3>Element Information</h3> +<a name="idp7293664"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -97,7 +97,7 @@ GstAmrnbEnc implements </div> <hr> <div class="refsect2"> -<a name="idp9318992"></a><h3>Element Pads</h3> +<a name="idp5635104"></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-ugly-plugins-amrwbdec.html b/docs/plugins/html/gst-plugins-ugly-plugins-amrwbdec.html index 10e17fa..3b0be58 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-amrwbdec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-amrwbdec.html @@ -58,7 +58,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9702592"></a><h3>Element Information</h3> +<a name="idp8542768"></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="idp5678704"></a><h3>Element Pads</h3> +<a name="idp8764960"></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-ugly-plugins-cdiocddasrc.html b/docs/plugins/html/gst-plugins-ugly-plugins-cdiocddasrc.html index c9031db..893ec6d 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-cdiocddasrc.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-cdiocddasrc.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-gstaudiocdsrc.html#GstAudioCdSrc">GstAudioCdSrc</a> + +----GstAudioCdSrc +----GstCdioCddaSrc </pre> </div> @@ -76,7 +76,7 @@ GstCdioCddaSrc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6729088"></a><h3>Element Information</h3> +<a name="idp6868336"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -99,7 +99,7 @@ GstCdioCddaSrc implements </div> <hr> <div class="refsect2"> -<a name="idp8760400"></a><h3>Element Pads</h3> +<a name="idp8340928"></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-ugly-plugins-lamemp3enc.html b/docs/plugins/html/gst-plugins-ugly-plugins-lamemp3enc.html index 49d957b..10f9650 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-lamemp3enc.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-lamemp3enc.html @@ -79,7 +79,7 @@ GstLameMP3Enc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7539504"></a><h3>Element Information</h3> +<a name="idp5678096"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -102,7 +102,7 @@ GstLameMP3Enc implements </div> <hr> <div class="refsect2"> -<a name="idp7705536"></a><h3>Element Pads</h3> +<a name="idp5685504"></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-ugly-plugins-mad.html b/docs/plugins/html/gst-plugins-ugly-plugins-mad.html index 1d6e10b..863a688 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-mad.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-mad.html @@ -67,7 +67,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp5205312"></a><h3>Element Information</h3> +<a name="idp7454528"></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="idp9743968"></a><h3>Element Pads</h3> +<a name="idp7727856"></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-ugly-plugins-plugin-a52dec.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-a52dec.html index d69b603..f32f685 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-a52dec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-a52dec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp9350160"></a><h2>Plugin Information</h2> +<a name="idp5964432"></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="idp2586240"></a><h2>Elements</h2> +<a name="idp7698784"></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-ugly-plugins-plugin-amrnb.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrnb.html index 5fe8ca8..6f8f09e 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrnb.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrnb.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp6184784"></a><h2>Plugin Information</h2> +<a name="idp6268832"></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="idp5322048"></a><h2>Elements</h2> +<a name="idp8473184"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrwbdec.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrwbdec.html index fb9049e..8637d69 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrwbdec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-amrwbdec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp8163712"></a><h2>Plugin Information</h2> +<a name="idp6254400"></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="idp8246384"></a><h2>Elements</h2> +<a name="idp8606208"></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-ugly-plugins-plugin-asf.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-asf.html index f654444..38057ce 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-asf.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-asf.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp9305104"></a><h2>Plugin Information</h2> +<a name="idp9282240"></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="idp6916128"></a><h2>Elements</h2> +<a name="idp8270768"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-cdio.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-cdio.html index 2ba2596..5c2c552 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-cdio.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-cdio.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp9020912"></a><h2>Plugin Information</h2> +<a name="idp6502448"></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="idp5701600"></a><h2>Elements</h2> +<a name="idp7288624"></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-ugly-plugins-plugin-dvdlpcmdec.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdlpcmdec.html index 679c0eb..2477f01 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdlpcmdec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdlpcmdec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp5307760"></a><h2>Plugin Information</h2> +<a name="idp8581344"></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="idp7999392"></a><h2>Elements</h2> +<a name="idp9026272"></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-ugly-plugins-plugin-dvdread.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdread.html index 3062233..c5231e0 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdread.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdread.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp9584752"></a><h2>Plugin Information</h2> +<a name="idp6827824"></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="idp5835824"></a><h2>Elements</h2> +<a name="idp6141328"></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-ugly-plugins-plugin-dvdsub.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdsub.html index c639c2e..bdfd477 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdsub.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-dvdsub.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp5617312"></a><h2>Plugin Information</h2> +<a name="idp9045472"></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="idp5561216"></a><h2>Elements</h2> +<a name="idp5300928"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-lame.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-lame.html index 4bfd579..e842247 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-lame.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-lame.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp9267216"></a><h2>Plugin Information</h2> +<a name="idp5254288"></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="idp9735696"></a><h2>Elements</h2> +<a name="idp7978128"></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-ugly-plugins-plugin-mad.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-mad.html index acce4e7..fb633dd 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-mad.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-mad.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp7965408"></a><h2>Plugin Information</h2> +<a name="idp5028768"></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="idp8174208"></a><h2>Elements</h2> +<a name="idp8319312"></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-ugly-plugins-plugin-mpeg2dec.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-mpeg2dec.html index c6200a6..37bc9a4 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-mpeg2dec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-mpeg2dec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp7595152"></a><h2>Plugin Information</h2> +<a name="idp6934800"></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="idp8858912"></a><h2>Elements</h2> +<a name="idp4982016"></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-ugly-plugins-plugin-realmedia.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-realmedia.html index 60549be..09e7e69 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-realmedia.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-realmedia.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp6162288"></a><h2>Plugin Information</h2> +<a name="idp8539504"></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="idp9386560"></a><h2>Elements</h2> +<a name="idp7252192"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-siddec.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-siddec.html index 3c8a88b..e778e45 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-siddec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-siddec.html @@ -7,7 +7,7 @@ <link rel="home" href="index.html" title="GStreamer Ugly Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch02.html" title="gst-plugins-ugly Plugins"> <link rel="prev" href="gst-plugins-ugly-plugins-plugin-realmedia.html" title="realmedia"> -<link rel="next" href="gst-plugins-ugly-plugins-plugin-synaesthesia.html" title="synaesthesia"> +<link rel="next" href="gst-plugins-ugly-plugins-plugin-twolame.html" title="twolame"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> @@ -17,7 +17,7 @@ <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Ugly Plugins 1.0 Plugins Reference Manual</th> -<td><a accesskey="n" href="gst-plugins-ugly-plugins-plugin-synaesthesia.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> +<td><a accesskey="n" href="gst-plugins-ugly-plugins-plugin-twolame.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr></table> <div class="refentry"> <a name="gst-plugins-ugly-plugins-plugin-siddec"></a><div class="titlepage"></div> @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp9556560"></a><h2>Plugin Information</h2> +<a name="idp5620064"></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="idp7474720"></a><h2>Elements</h2> +<a name="idp8746224"></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-ugly-plugins-plugin-synaesthesia.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-synaesthesia.html deleted file mode 100644 index a4b155b..0000000 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-synaesthesia.html +++ /dev/null @@ -1,74 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<title>synaesthesia</title> -<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> -<link rel="home" href="index.html" title="GStreamer Ugly Plugins 1.0 Plugins Reference Manual"> -<link rel="up" href="ch02.html" title="gst-plugins-ugly Plugins"> -<link rel="prev" href="gst-plugins-ugly-plugins-plugin-siddec.html" title="siddec"> -<link rel="next" href="gst-plugins-ugly-plugins-plugin-twolame.html" title="twolame"> -<meta name="generator" content="GTK-Doc V1.18 (XML mode)"> -<link rel="stylesheet" href="style.css" type="text/css"> -</head> -<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> -<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> -<td><a accesskey="p" href="gst-plugins-ugly-plugins-plugin-siddec.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> -<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> -<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> -<th width="100%" align="center">GStreamer Ugly Plugins 1.0 Plugins Reference Manual</th> -<td><a accesskey="n" href="gst-plugins-ugly-plugins-plugin-twolame.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> -</tr></table> -<div class="refentry"> -<a name="gst-plugins-ugly-plugins-plugin-synaesthesia"></a><div class="titlepage"></div> -<div class="refnamediv"><table width="100%"><tr> -<td valign="top"> -<h2><span class="refentrytitle">synaesthesia</span></h2> -<p>synaesthesia — <a name="plugin-synaesthesia"></a>Creates video visualizations of audio input, using stereo and pitch information</p> -</td> -<td valign="top" align="right"></td> -</tr></table></div> -<div class="refsect1"> -<a name="idp7459152"></a><h2>Plugin Information</h2> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">filename</span></p></td> -<td>libgstsynaesthesia.so</td> -</tr> -<tr> -<td><p><span class="term">version</span></p></td> -<td>0.10.17.4</td> -</tr> -<tr> -<td><p><span class="term">run-time license</span></p></td> -<td>GPL</td> -</tr> -<tr> -<td><p><span class="term">package</span></p></td> -<td>GStreamer Ugly Plug-ins prerelease</td> -</tr> -<tr> -<td><p><span class="term">origin</span></p></td> -<td>Unknown package origin</td> -</tr> -</tbody> -</table></div> -</div> -<div class="refsect1"> -<a name="idp8694768"></a><h2>Elements</h2> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody><tr> -<td><p><span class="term"><a class="link" href="gst-plugins-ugly-plugins-synaesthesia.html" title="synaesthesia">synaesthesia</a></span></p></td> -<td>Creates video visualizations of audio input, using stereo and pitch information</td> -</tr></tbody> -</table></div> -</div> -</div> -<div class="footer"> -<hr> - Generated by GTK-Doc V1.18</div> -</body> -</html>
\ No newline at end of file diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-twolame.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-twolame.html index 4fcfdf1..142e240 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-twolame.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-twolame.html @@ -6,14 +6,14 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> <link rel="home" href="index.html" title="GStreamer Ugly Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch02.html" title="gst-plugins-ugly Plugins"> -<link rel="prev" href="gst-plugins-ugly-plugins-plugin-synaesthesia.html" title="synaesthesia"> +<link rel="prev" href="gst-plugins-ugly-plugins-plugin-siddec.html" title="siddec"> <link rel="next" href="gst-plugins-ugly-plugins-plugin-x264.html" title="x264"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> -<td><a accesskey="p" href="gst-plugins-ugly-plugins-plugin-synaesthesia.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> +<td><a accesskey="p" href="gst-plugins-ugly-plugins-plugin-siddec.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Ugly Plugins 1.0 Plugins Reference Manual</th> @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp10546320"></a><h2>Plugin Information</h2> +<a name="idp5749568"></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="idp5771168"></a><h2>Elements</h2> +<a name="idp6065472"></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-ugly-plugins-plugin-x264.html b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-x264.html index 47012d6..3716288 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-plugin-x264.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-plugin-x264.html @@ -28,7 +28,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp5416432"></a><h2>Plugin Information</h2> +<a name="idp5204016"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -56,7 +56,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp5724400"></a><h2>Elements</h2> +<a name="idp5784544"></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-ugly-plugins-rademux.html b/docs/plugins/html/gst-plugins-ugly-plugins-rademux.html index d39084b..6c40fca 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-rademux.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-rademux.html @@ -60,7 +60,7 @@ Demuxes/parses a RealAudio (.ra) file or stream into compressed audio. <p> </p> <div class="refsect2"> -<a name="idp5629056"></a><h3>Example launch line</h3> +<a name="idp4983856"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -94,7 +94,7 @@ Last reviewed on 2006-10-24 (0.10.5) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7830400"></a><h3>Element Information</h3> +<a name="idp6150640"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -117,7 +117,7 @@ Last reviewed on 2006-10-24 (0.10.5) </div> <hr> <div class="refsect2"> -<a name="idp7006848"></a><h3>Element Pads</h3> +<a name="idp5940544"></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-ugly-plugins-rdtmanager.html b/docs/plugins/html/gst-plugins-ugly-plugins-rdtmanager.html index 116ab07..73f01ed 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-rdtmanager.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-rdtmanager.html @@ -83,7 +83,7 @@ Last reviewed on 2006-06-20 (0.10.4) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7275136"></a><h3>Element Information</h3> +<a name="idp9768368"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -106,7 +106,7 @@ Last reviewed on 2006-06-20 (0.10.4) </div> <hr> <div class="refsect2"> -<a name="idp6700912"></a><h3>Element Pads</h3> +<a name="idp5737536"></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-ugly-plugins-rmdemux.html b/docs/plugins/html/gst-plugins-ugly-plugins-rmdemux.html index ffe4c30..9985c5b 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-rmdemux.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-rmdemux.html @@ -57,7 +57,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6843856"></a><h3>Element Information</h3> +<a name="idp6674240"></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="idp9234736"></a><h3>Element Pads</h3> +<a name="idp6920000"></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-ugly-plugins-rtspreal.html b/docs/plugins/html/gst-plugins-ugly-plugins-rtspreal.html index c251a86..fd6e454 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-rtspreal.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-rtspreal.html @@ -71,7 +71,7 @@ Last reviewed on 2007-07-25 (0.10.14) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp5994752"></a><h3>Element Information</h3> +<a name="idp5547776"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ Last reviewed on 2007-07-25 (0.10.14) </div> <hr> <div class="refsect2"> -<a name="idp6140752"></a><h3>Element Pads</h3> +<a name="idp9675280"></a><h3>Element Pads</h3> </div> </div> <p> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-rtspwms.html b/docs/plugins/html/gst-plugins-ugly-plugins-rtspwms.html index 6bb8774..d283ec5 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-rtspwms.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-rtspwms.html @@ -71,7 +71,7 @@ Last reviewed on 2007-07-25 (0.10.14) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp2567296"></a><h3>Element Information</h3> +<a name="idp6239648"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ Last reviewed on 2007-07-25 (0.10.14) </div> <hr> <div class="refsect2"> -<a name="idp8773856"></a><h3>Element Pads</h3> +<a name="idp8966144"></a><h3>Element Pads</h3> </div> </div> <p> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-siddec.html b/docs/plugins/html/gst-plugins-ugly-plugins-siddec.html index 17ee6ff..565aab5 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-siddec.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-siddec.html @@ -73,7 +73,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10167424"></a><h3>Element Information</h3> +<a name="idp9665392"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -96,7 +96,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10174880"></a><h3>Element Pads</h3> +<a name="idp9672848"></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-ugly-plugins-synaesthesia.html b/docs/plugins/html/gst-plugins-ugly-plugins-synaesthesia.html deleted file mode 100644 index 7ba4aa1..0000000 --- a/docs/plugins/html/gst-plugins-ugly-plugins-synaesthesia.html +++ /dev/null @@ -1,190 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<title>synaesthesia</title> -<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> -<link rel="home" href="index.html" title="GStreamer Ugly Plugins 1.0 Plugins Reference Manual"> -<link rel="up" href="ch01.html" title="gst-plugins-ugly Elements"> -<link rel="prev" href="gst-plugins-ugly-plugins-twolame.html" title="twolame"> -<link rel="next" href="gst-plugins-ugly-plugins-x264enc.html" title="x264enc"> -<meta name="generator" content="GTK-Doc V1.18 (XML mode)"> -<link rel="stylesheet" href="style.css" type="text/css"> -</head> -<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> -<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> -<tr valign="middle"> -<td><a accesskey="p" href="gst-plugins-ugly-plugins-twolame.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> -<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> -<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> -<th width="100%" align="center">GStreamer Ugly Plugins 1.0 Plugins Reference Manual</th> -<td><a accesskey="n" href="gst-plugins-ugly-plugins-x264enc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> -</tr> -<tr><td colspan="5" class="shortcuts"> -<a href="#gst-plugins-ugly-plugins-synaesthesia.synopsis" class="shortcut">Top</a> - | - <a href="#gst-plugins-ugly-plugins-synaesthesia.description" class="shortcut">Description</a> -</td></tr> -</table> -<div class="refentry"> -<a name="gst-plugins-ugly-plugins-synaesthesia"></a><div class="titlepage"></div> -<div class="refnamediv"><table width="100%"><tr> -<td valign="top"> -<h2><span class="refentrytitle"><a name="gst-plugins-ugly-plugins-synaesthesia.top_of_page"></a>synaesthesia</span></h2> -<p>synaesthesia — Creates video visualizations of audio input, using stereo and pitch information</p> -</td> -<td valign="top" align="right"></td> -</tr></table></div> -<div class="refsynopsisdiv"> -<a name="gst-plugins-ugly-plugins-synaesthesia.synopsis"></a><h2>Synopsis</h2> -<pre class="synopsis">struct <a class="link" href="gst-plugins-ugly-plugins-synaesthesia.html#GstSynaesthesia" title="struct GstSynaesthesia">GstSynaesthesia</a>; -</pre> -</div> -<div class="refsect1"> -<a name="gst-plugins-ugly-plugins-synaesthesia.description"></a><h2>Description</h2> -<p> -Synaesthesia is an audio visualisation element. It creates glitter and -pulsating fog based on the incomming audio signal. -</p> -<p> -</p> -<div class="refsect2"> -<a name="idp8624816"></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 -2</pre></td> - <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> synaesthesia <span class="gtkdoc opt">!</span> ximagesink -gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> synaesthesia <span class="gtkdoc opt">!</span> ffmpegcolorspace <span class="gtkdoc opt">!</span> xvimagesink</pre></td> - </tr> - </tbody> - </table> -</div> - -</div> -<p> -</p> -<div class="refsynopsisdiv"> -<h2>Synopsis</h2> -<div class="refsect2"> -<a name="idp2533280"></a><h3>Element Information</h3> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">plugin</span></p></td> -<td> - <a class="link" href="gst-plugins-ugly-plugins-plugin-synaesthesia.html#plugin-synaesthesia">synaesthesia</a> - </td> -</tr> -<tr> -<td><p><span class="term">author</span></p></td> -<td>Richard Boulton <richard@tartarus.org></td> -</tr> -<tr> -<td><p><span class="term">class</span></p></td> -<td>Visualization</td> -</tr> -</tbody> -</table></div> -</div> -<hr> -<div class="refsect2"> -<a name="idp7616672"></a><h3>Element Pads</h3> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">name</span></p></td> -<td>sink</td> -</tr> -<tr> -<td><p><span class="term">direction</span></p></td> -<td>sink</td> -</tr> -<tr> -<td><p><span class="term">presence</span></p></td> -<td>always</td> -</tr> -<tr> -<td><p><span class="term">details</span></p></td> -<td>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)2, endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</td> -</tr> -</tbody> -</table></div> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">name</span></p></td> -<td>src</td> -</tr> -<tr> -<td><p><span class="term">direction</span></p></td> -<td>source</td> -</tr> -<tr> -<td><p><span class="term">presence</span></p></td> -<td>always</td> -</tr> -<tr> -<td><p><span class="term">details</span></p></td> -<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td> -</tr> -</tbody> -</table></div> -</div> -</div> -<p> -</p> -</div> -<div class="refsect1"> -<a name="gst-plugins-ugly-plugins-synaesthesia.details"></a><h2>Details</h2> -<div class="refsect2"> -<a name="GstSynaesthesia"></a><h3>struct GstSynaesthesia</h3> -<pre class="programlisting">struct GstSynaesthesia { - GstElement element; - - /* pads */ - GstPad *sinkpad, *srcpad; - GstAdapter *adapter; - - guint64 next_ts; /* the timestamp of the next frame */ - guint64 frame_duration; - guint bps; /* bytes per sample */ - guint spf; /* samples per video frame */ - - gint16 datain[2][FFT_BUFFER_SIZE]; - - /* video state */ - gint fps_n, fps_d; - gint width; - gint height; - guint outsize; - GstBufferPool *pool; - - /* Audio state */ - gint sample_rate; - gint rate; - gint channels; - - /* Synaesthesia instance */ - syn_instance *si; -}; -</pre> -<p> -</p> -</div> -</div> -<div class="refsect1"> -<a name="gst-plugins-ugly-plugins-synaesthesia.see-also"></a><h2>See Also</h2> -goom -</div> -</div> -<div class="footer"> -<hr> - Generated by GTK-Doc V1.18</div> -</body> -</html>
\ No newline at end of file diff --git a/docs/plugins/html/gst-plugins-ugly-plugins-twolame.html b/docs/plugins/html/gst-plugins-ugly-plugins-twolame.html index 8e51973..bf43565 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-twolame.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-twolame.html @@ -7,7 +7,7 @@ <link rel="home" href="index.html" title="GStreamer Ugly Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch01.html" title="gst-plugins-ugly Elements"> <link rel="prev" href="gst-plugins-ugly-plugins-siddec.html" title="siddec"> -<link rel="next" href="gst-plugins-ugly-plugins-synaesthesia.html" title="synaesthesia"> +<link rel="next" href="gst-plugins-ugly-plugins-x264enc.html" title="x264enc"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> @@ -18,7 +18,7 @@ <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Ugly Plugins 1.0 Plugins Reference Manual</th> -<td><a accesskey="n" href="gst-plugins-ugly-plugins-synaesthesia.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> +<td><a accesskey="n" href="gst-plugins-ugly-plugins-x264enc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr> <tr><td colspan="5" class="shortcuts"> <a href="#gst-plugins-ugly-plugins-twolame.synopsis" class="shortcut">Top</a> @@ -88,7 +88,7 @@ GstTwoLame implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10266640"></a><h3>Element Information</h3> +<a name="idp10286128"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -111,7 +111,7 @@ GstTwoLame implements </div> <hr> <div class="refsect2"> -<a name="idp10274048"></a><h3>Element Pads</h3> +<a name="idp10293536"></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-ugly-plugins-x264enc.html b/docs/plugins/html/gst-plugins-ugly-plugins-x264enc.html index caeaec9..73c4107 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-x264enc.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-x264enc.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> <link rel="home" href="index.html" title="GStreamer Ugly Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch01.html" title="gst-plugins-ugly Elements"> -<link rel="prev" href="gst-plugins-ugly-plugins-synaesthesia.html" title="synaesthesia"> +<link rel="prev" href="gst-plugins-ugly-plugins-twolame.html" title="twolame"> <link rel="next" href="gst-plugins-ugly-plugins-xingmux.html" title="xingmux"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -14,7 +14,7 @@ <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> <tr valign="middle"> -<td><a accesskey="p" href="gst-plugins-ugly-plugins-synaesthesia.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> +<td><a accesskey="p" href="gst-plugins-ugly-plugins-twolame.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Ugly Plugins 1.0 Plugins Reference Manual</th> @@ -111,7 +111,7 @@ GstX264Enc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11097680"></a><h3>Element Information</h3> +<a name="idp10451408"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -134,7 +134,7 @@ GstX264Enc implements </div> <hr> <div class="refsect2"> -<a name="idp11105088"></a><h3>Element Pads</h3> +<a name="idp10458816"></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-ugly-plugins-xingmux.html b/docs/plugins/html/gst-plugins-ugly-plugins-xingmux.html index a2cef55..cb3672a 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins-xingmux.html +++ b/docs/plugins/html/gst-plugins-ugly-plugins-xingmux.html @@ -33,7 +33,7 @@ <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="gst-plugins-ugly-plugins-xingmux.top_of_page"></a>xingmux</span></h2> -<p>xingmux — Adds a Xing header to the beginning of a VBR MP3 file</p> +<p>xingmux</p> </td> <td valign="top" align="right"></td> </tr></table></div> @@ -65,7 +65,7 @@ This element will remove any existing Xing, LAME or VBRI headers from the beginn <p> </p> <div class="refsect2"> -<a name="idp6017184"></a><h3>Example launch line</h3> +<a name="idp8175216"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -84,77 +84,6 @@ gst<span class="gtkdoc opt">-</span>launch filesrc location<span class="gtkdoc o </div> <p> </p> -<div class="refsynopsisdiv"> -<h2>Synopsis</h2> -<div class="refsect2"> -<a name="idp8782336"></a><h3>Element Information</h3> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">plugin</span></p></td> -<td> - xingmux - </td> -</tr> -<tr> -<td><p><span class="term">author</span></p></td> -<td>Christophe Fergeau <teuf@gnome.org></td> -</tr> -<tr> -<td><p><span class="term">class</span></p></td> -<td>Formatter/Metadata</td> -</tr> -</tbody> -</table></div> -</div> -<hr> -<div class="refsect2"> -<a name="idp6650256"></a><h3>Element Pads</h3> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">name</span></p></td> -<td>sink</td> -</tr> -<tr> -<td><p><span class="term">direction</span></p></td> -<td>sink</td> -</tr> -<tr> -<td><p><span class="term">presence</span></p></td> -<td>always</td> -</tr> -<tr> -<td><p><span class="term">details</span></p></td> -<td>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ]</td> -</tr> -</tbody> -</table></div> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">name</span></p></td> -<td>src</td> -</tr> -<tr> -<td><p><span class="term">direction</span></p></td> -<td>source</td> -</tr> -<tr> -<td><p><span class="term">presence</span></p></td> -<td>always</td> -</tr> -<tr> -<td><p><span class="term">details</span></p></td> -<td>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ]</td> -</tr> -</tbody> -</table></div> -</div> -</div> <p> </p> </div> diff --git a/docs/plugins/html/gst-plugins-ugly-plugins.devhelp2 b/docs/plugins/html/gst-plugins-ugly-plugins.devhelp2 index 88e2b61..2ee5e25 100644 --- a/docs/plugins/html/gst-plugins-ugly-plugins.devhelp2 +++ b/docs/plugins/html/gst-plugins-ugly-plugins.devhelp2 @@ -17,7 +17,6 @@ <sub name="rtspwms" link="gst-plugins-ugly-plugins-rtspwms.html"/> <sub name="siddec" link="gst-plugins-ugly-plugins-siddec.html"/> <sub name="twolame" link="gst-plugins-ugly-plugins-twolame.html"/> - <sub name="synaesthesia" link="gst-plugins-ugly-plugins-synaesthesia.html"/> <sub name="x264enc" link="gst-plugins-ugly-plugins-x264enc.html"/> <sub name="xingmux" link="gst-plugins-ugly-plugins-xingmux.html"/> </sub> @@ -35,35 +34,34 @@ <sub name="mpeg2dec" link="gst-plugins-ugly-plugins-plugin-mpeg2dec.html"/> <sub name="realmedia" link="gst-plugins-ugly-plugins-plugin-realmedia.html"/> <sub name="siddec" link="gst-plugins-ugly-plugins-plugin-siddec.html"/> - <sub name="synaesthesia" link="gst-plugins-ugly-plugins-plugin-synaesthesia.html"/> <sub name="twolame" link="gst-plugins-ugly-plugins-plugin-twolame.html"/> <sub name="x264" link="gst-plugins-ugly-plugins-plugin-x264.html"/> </sub> </chapters> <functions> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-a52dec.html#idp7841248"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-a52dec.html#idp5861520"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-a52dec.html#idp5740240"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-a52dec.html#idp6145440"/> <keyword type="struct" name="struct GstA52Dec" link="gst-plugins-ugly-plugins-a52dec.html#GstA52Dec-struct"/> <keyword type="property" name="The "drc" property" link="gst-plugins-ugly-plugins-a52dec.html#GstA52Dec--drc"/> <keyword type="property" name="The "lfe" property" link="gst-plugins-ugly-plugins-a52dec.html#GstA52Dec--lfe"/> <keyword type="property" name="The "mode" property" link="gst-plugins-ugly-plugins-a52dec.html#GstA52Dec--mode"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-amrnbdec.html#idp7062896"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-amrnbdec.html#idp9447728"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-amrnbdec.html#idp7778032"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-amrnbdec.html#idp7830432"/> <keyword type="struct" name="struct GstAmrnbDec" link="gst-plugins-ugly-plugins-amrnbdec.html#GstAmrnbDec-struct"/> <keyword type="property" name="The "variant" property" link="gst-plugins-ugly-plugins-amrnbdec.html#GstAmrnbDec--variant"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-amrnbenc.html#idp8720928"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-amrnbenc.html#idp9318992"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-amrnbenc.html#idp7293664"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-amrnbenc.html#idp5635104"/> <keyword type="struct" name="struct GstAmrnbEnc" link="gst-plugins-ugly-plugins-amrnbenc.html#GstAmrnbEnc-struct"/> <keyword type="property" name="The "band-mode" property" link="gst-plugins-ugly-plugins-amrnbenc.html#GstAmrnbEnc--band-mode"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-amrwbdec.html#idp9702592"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-amrwbdec.html#idp5678704"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-amrwbdec.html#idp8542768"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-amrwbdec.html#idp8764960"/> <keyword type="struct" name="struct GstAmrwbDec" link="gst-plugins-ugly-plugins-amrwbdec.html#GstAmrwbDec-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-cdiocddasrc.html#idp6729088"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-cdiocddasrc.html#idp8760400"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-cdiocddasrc.html#idp6868336"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-cdiocddasrc.html#idp8340928"/> <keyword type="struct" name="struct GstCdioCddaSrc" link="gst-plugins-ugly-plugins-cdiocddasrc.html#GstCdioCddaSrc-struct"/> <keyword type="property" name="The "read-speed" property" link="gst-plugins-ugly-plugins-cdiocddasrc.html#GstCdioCddaSrc--read-speed"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-lamemp3enc.html#idp7539504"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-lamemp3enc.html#idp7705536"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-lamemp3enc.html#idp5678096"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-lamemp3enc.html#idp5685504"/> <keyword type="struct" name="struct GstLameMP3Enc" link="gst-plugins-ugly-plugins-lamemp3enc.html#GstLameMP3Enc-struct"/> <keyword type="property" name="The "bitrate" property" link="gst-plugins-ugly-plugins-lamemp3enc.html#GstLameMP3Enc--bitrate"/> <keyword type="property" name="The "cbr" property" link="gst-plugins-ugly-plugins-lamemp3enc.html#GstLameMP3Enc--cbr"/> @@ -71,20 +69,20 @@ <keyword type="property" name="The "mono" property" link="gst-plugins-ugly-plugins-lamemp3enc.html#GstLameMP3Enc--mono"/> <keyword type="property" name="The "quality" property" link="gst-plugins-ugly-plugins-lamemp3enc.html#GstLameMP3Enc--quality"/> <keyword type="property" name="The "target" property" link="gst-plugins-ugly-plugins-lamemp3enc.html#GstLameMP3Enc--target"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-mad.html#idp5205312"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-mad.html#idp9743968"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-mad.html#idp7454528"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-mad.html#idp7727856"/> <keyword type="struct" name="struct GstMad" link="gst-plugins-ugly-plugins-mad.html#GstMad-struct"/> <keyword type="property" name="The "half" property" link="gst-plugins-ugly-plugins-mad.html#GstMad--half"/> <keyword type="property" name="The "ignore-crc" property" link="gst-plugins-ugly-plugins-mad.html#GstMad--ignore-crc"/> - <keyword type="" name="Example launch line" link="gst-plugins-ugly-plugins-rademux.html#idp5629056"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rademux.html#idp7830400"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rademux.html#idp7006848"/> + <keyword type="" name="Example launch line" link="gst-plugins-ugly-plugins-rademux.html#idp4983856"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rademux.html#idp6150640"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rademux.html#idp5940544"/> <keyword type="struct" name="struct GstRealAudioDemux" link="gst-plugins-ugly-plugins-rademux.html#GstRealAudioDemux-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rmdemux.html#idp6843856"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rmdemux.html#idp9234736"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rmdemux.html#idp6674240"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rmdemux.html#idp6920000"/> <keyword type="struct" name="struct GstRMDemux" link="gst-plugins-ugly-plugins-rmdemux.html#GstRMDemux-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rdtmanager.html#idp7275136"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rdtmanager.html#idp6700912"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rdtmanager.html#idp9768368"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rdtmanager.html#idp5737536"/> <keyword type="struct" name="struct GstRDTManager" link="gst-plugins-ugly-plugins-rdtmanager.html#GstRDTManager-struct"/> <keyword type="property" name="The "latency" property" link="gst-plugins-ugly-plugins-rdtmanager.html#GstRDTManager--latency"/> <keyword type="signal" name="The "clear-pt-map" signal" link="gst-plugins-ugly-plugins-rdtmanager.html#GstRDTManager-clear-pt-map"/> @@ -92,14 +90,14 @@ <keyword type="signal" name="The "on-bye-timeout" signal" link="gst-plugins-ugly-plugins-rdtmanager.html#GstRDTManager-on-bye-timeout"/> <keyword type="signal" name="The "on-timeout" signal" link="gst-plugins-ugly-plugins-rdtmanager.html#GstRDTManager-on-timeout"/> <keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-ugly-plugins-rdtmanager.html#GstRDTManager-request-pt-map"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rtspreal.html#idp5994752"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rtspreal.html#idp6140752"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rtspreal.html#idp5547776"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rtspreal.html#idp9675280"/> <keyword type="struct" name="struct GstRTSPReal" link="gst-plugins-ugly-plugins-rtspreal.html#GstRTSPReal-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rtspwms.html#idp2567296"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rtspwms.html#idp8773856"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-rtspwms.html#idp6239648"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-rtspwms.html#idp8966144"/> <keyword type="struct" name="struct GstRTSPWMS" link="gst-plugins-ugly-plugins-rtspwms.html#GstRTSPWMS-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-siddec.html#idp10167424"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-siddec.html#idp10174880"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-siddec.html#idp9665392"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-siddec.html#idp9672848"/> <keyword type="struct" name="struct GstSidDec" link="gst-plugins-ugly-plugins-siddec.html#GstSidDec-struct"/> <keyword type="property" name="The "blocksize" property" link="gst-plugins-ugly-plugins-siddec.html#GstSidDec--blocksize"/> <keyword type="property" name="The "clock" property" link="gst-plugins-ugly-plugins-siddec.html#GstSidDec--clock"/> @@ -110,8 +108,8 @@ <keyword type="property" name="The "metadata" property" link="gst-plugins-ugly-plugins-siddec.html#GstSidDec--metadata"/> <keyword type="property" name="The "mos8580" property" link="gst-plugins-ugly-plugins-siddec.html#GstSidDec--mos8580"/> <keyword type="property" name="The "tune" property" link="gst-plugins-ugly-plugins-siddec.html#GstSidDec--tune"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-twolame.html#idp10266640"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-twolame.html#idp10274048"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-twolame.html#idp10286128"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-twolame.html#idp10293536"/> <keyword type="struct" name="struct GstTwoLame" link="gst-plugins-ugly-plugins-twolame.html#GstTwoLame-struct"/> <keyword type="property" name="The "ath-level" property" link="gst-plugins-ugly-plugins-twolame.html#GstTwoLame--ath-level"/> <keyword type="property" name="The "bitrate" property" link="gst-plugins-ugly-plugins-twolame.html#GstTwoLame--bitrate"/> @@ -128,12 +126,8 @@ <keyword type="property" name="The "vbr" property" link="gst-plugins-ugly-plugins-twolame.html#GstTwoLame--vbr"/> <keyword type="property" name="The "vbr-level" property" link="gst-plugins-ugly-plugins-twolame.html#GstTwoLame--vbr-level"/> <keyword type="property" name="The "vbr-max-bitrate" property" link="gst-plugins-ugly-plugins-twolame.html#GstTwoLame--vbr-max-bitrate"/> - <keyword type="" name="Example launch line" link="gst-plugins-ugly-plugins-synaesthesia.html#idp8624816"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-synaesthesia.html#idp2533280"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-synaesthesia.html#idp7616672"/> - <keyword type="struct" name="struct GstSynaesthesia" link="gst-plugins-ugly-plugins-synaesthesia.html#GstSynaesthesia"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-x264enc.html#idp11097680"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-x264enc.html#idp11105088"/> + <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-x264enc.html#idp10451408"/> + <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-x264enc.html#idp10458816"/> <keyword type="struct" name="struct GstX264Enc" link="gst-plugins-ugly-plugins-x264enc.html#GstX264Enc-struct"/> <keyword type="property" name="The "analyse" property" link="gst-plugins-ugly-plugins-x264enc.html#GstX264Enc--analyse"/> <keyword type="property" name="The "aud" property" link="gst-plugins-ugly-plugins-x264enc.html#GstX264Enc--aud"/> @@ -174,9 +168,7 @@ <keyword type="property" name="The "psy-tune" property" link="gst-plugins-ugly-plugins-x264enc.html#GstX264Enc--psy-tune"/> <keyword type="property" name="The "speed-preset" property" link="gst-plugins-ugly-plugins-x264enc.html#GstX264Enc--speed-preset"/> <keyword type="property" name="The "tune" property" link="gst-plugins-ugly-plugins-x264enc.html#GstX264Enc--tune"/> - <keyword type="" name="Example launch line" link="gst-plugins-ugly-plugins-xingmux.html#idp6017184"/> - <keyword type="" name="Element Information" link="gst-plugins-ugly-plugins-xingmux.html#idp8782336"/> - <keyword type="" name="Element Pads" link="gst-plugins-ugly-plugins-xingmux.html#idp6650256"/> + <keyword type="" name="Example launch line" link="gst-plugins-ugly-plugins-xingmux.html#idp8175216"/> <keyword type="struct" name="struct GstXingMux" link="gst-plugins-ugly-plugins-xingmux.html#GstXingMux-struct"/> </functions> </book> diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html index 88c2f94..9149b00 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 Ugly Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for GStreamer Ugly Plugins 1.0 (0.11.92) + for GStreamer Ugly 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-ugly/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-ugly/html/</a>. </p></div> @@ -68,13 +68,10 @@ <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-twolame.html">twolame</a></span><span class="refpurpose"> — High-quality free MP2 encoder</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-synaesthesia.html">synaesthesia</a></span><span class="refpurpose"> — Creates video visualizations of audio input, using stereo and pitch information</span> -</dt> -<dt> <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-x264enc.html">x264enc</a></span><span class="refpurpose"> — H264 Encoder</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-xingmux.html">xingmux</a></span><span class="refpurpose"> — Adds a Xing header to the beginning of a VBR MP3 file</span> +<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-xingmux.html">xingmux</a></span><span class="refpurpose"></span> </dt> </dl></dd> <dt><span class="chapter"><a href="ch02.html">gst-plugins-ugly Plugins</a></span></dt> @@ -119,9 +116,6 @@ <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-siddec.html">siddec</a></span><span class="refpurpose"> — <a name="plugin-siddec"></a>Uses libsidplay to decode .sid files</span> </dt> <dt> -<span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-synaesthesia.html">synaesthesia</a></span><span class="refpurpose"> — <a name="plugin-synaesthesia"></a>Creates video visualizations of audio input, using stereo and pitch information</span> -</dt> -<dt> <span class="refentrytitle"><a href="gst-plugins-ugly-plugins-plugin-twolame.html">twolame</a></span><span class="refpurpose"> — <a name="plugin-twolame"></a>Encode MP2s with TwoLAME</span> </dt> <dt> diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml index 260fea2..bd630b0 100644 --- a/docs/plugins/html/index.sgml +++ b/docs/plugins/html/index.sgml @@ -168,12 +168,6 @@ <ANCHOR id="GstTwoLame--vbr" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-twolame.html#GstTwoLame--vbr"> <ANCHOR id="GstTwoLame--vbr-level" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-twolame.html#GstTwoLame--vbr-level"> <ANCHOR id="GstTwoLame--vbr-max-bitrate" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-twolame.html#GstTwoLame--vbr-max-bitrate"> -<ANCHOR id="gst-plugins-ugly-plugins-synaesthesia" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-synaesthesia.html"> -<ANCHOR id="gst-plugins-ugly-plugins-synaesthesia.synopsis" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-synaesthesia.html#gst-plugins-ugly-plugins-synaesthesia.synopsis"> -<ANCHOR id="gst-plugins-ugly-plugins-synaesthesia.description" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-synaesthesia.html#gst-plugins-ugly-plugins-synaesthesia.description"> -<ANCHOR id="gst-plugins-ugly-plugins-synaesthesia.details" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-synaesthesia.html#gst-plugins-ugly-plugins-synaesthesia.details"> -<ANCHOR id="GstSynaesthesia" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-synaesthesia.html#GstSynaesthesia"> -<ANCHOR id="gst-plugins-ugly-plugins-synaesthesia.see-also" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-synaesthesia.html#gst-plugins-ugly-plugins-synaesthesia.see-also"> <ANCHOR id="gst-plugins-ugly-plugins-x264enc" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-x264enc.html"> <ANCHOR id="gst-plugins-ugly-plugins-x264enc.synopsis" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-x264enc.html#gst-plugins-ugly-plugins-x264enc.synopsis"> <ANCHOR id="GstX264Enc" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-x264enc.html#GstX264Enc"> @@ -256,8 +250,6 @@ <ANCHOR id="plugin-realmedia" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-realmedia.html#plugin-realmedia"> <ANCHOR id="gst-plugins-ugly-plugins-plugin-siddec" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-siddec.html"> <ANCHOR id="plugin-siddec" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-siddec.html#plugin-siddec"> -<ANCHOR id="gst-plugins-ugly-plugins-plugin-synaesthesia" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-synaesthesia.html"> -<ANCHOR id="plugin-synaesthesia" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-synaesthesia.html#plugin-synaesthesia"> <ANCHOR id="gst-plugins-ugly-plugins-plugin-twolame" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-twolame.html"> <ANCHOR id="plugin-twolame" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-twolame.html#plugin-twolame"> <ANCHOR id="gst-plugins-ugly-plugins-plugin-x264" href="gst-plugins-ugly-plugins-1.0/gst-plugins-ugly-plugins-plugin-x264.html"> diff --git a/docs/plugins/inspect/plugin-synaesthesia.xml b/docs/plugins/inspect/plugin-synaesthesia.xml deleted file mode 100644 index a3b2ac2..0000000 --- a/docs/plugins/inspect/plugin-synaesthesia.xml +++ /dev/null @@ -1,34 +0,0 @@ -<plugin> - <name>synaesthesia</name> - <description>Creates video visualizations of audio input, using stereo and pitch information</description> - <filename>../../gst/synaesthesia/.libs/libgstsynaesthesia.so</filename> - <basename>libgstsynaesthesia.so</basename> - <version>0.10.17.4</version> - <license>GPL</license> - <source>gst-plugins-ugly</source> - <package>GStreamer Ugly Plug-ins prerelease</package> - <origin>Unknown package origin</origin> - <elements> - <element> - <name>synaesthesia</name> - <longname>Synaesthesia</longname> - <class>Visualization</class> - <description>Creates video visualizations of audio input, using stereo and pitch information</description> - <author>Richard Boulton <richard@tartarus.org></author> - <pads> - <caps> - <name>sink</name> - <direction>sink</direction> - <presence>always</presence> - <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)2, endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</details> - </caps> - <caps> - <name>src</name> - <direction>source</direction> - <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> - </caps> - </pads> - </element> - </elements> -</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-xingmux.xml b/docs/plugins/inspect/plugin-xingmux.xml deleted file mode 100644 index 3ccaecf..0000000 --- a/docs/plugins/inspect/plugin-xingmux.xml +++ /dev/null @@ -1,34 +0,0 @@ -<plugin> - <name>xingmux</name> - <description>Add XING tags to mpeg audio files</description> - <filename>../../gst/xingmux/.libs/libgstxingmux.so</filename> - <basename>libgstxingmux.so</basename> - <version>0.11.92</version> - <license>LGPL</license> - <source>gst-plugins-ugly</source> - <package>GStreamer Ugly Plug-ins source release</package> - <origin>Unknown package origin</origin> - <elements> - <element> - <name>xingmux</name> - <longname>MP3 Xing muxer</longname> - <class>Formatter/Metadata</class> - <description>Adds a Xing header to the beginning of a VBR MP3 file</description> - <author>Christophe Fergeau <teuf@gnome.org></author> - <pads> - <caps> - <name>sink</name> - <direction>sink</direction> - <presence>always</presence> - <details>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ]</details> - </caps> - <caps> - <name>src</name> - <direction>source</direction> - <presence>always</presence> - <details>audio/mpeg, mpegversion=(int)1, layer=(int)[ 1, 3 ]</details> - </caps> - </pads> - </element> - </elements> -</plugin>
\ No newline at end of file diff --git a/ext/Makefile.in b/ext/Makefile.in index e599333..ae7e4cf 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, @@ -212,7 +212,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/a52dec/Makefile.in b/ext/a52dec/Makefile.in index 30e0a78..48ef59f 100644 --- a/ext/a52dec/Makefile.in +++ b/ext/a52dec/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, @@ -235,7 +235,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/a52dec/gsta52dec.c b/ext/a52dec/gsta52dec.c index dfcb480..9693e13 100644 --- a/ext/a52dec/gsta52dec.c +++ b/ext/a52dec/gsta52dec.c @@ -460,7 +460,7 @@ gst_a52dec_update_streaminfo (GstA52Dec * a52dec) gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (a52dec), taglist, GST_TAG_MERGE_REPLACE); - gst_tag_list_free (taglist); + gst_tag_list_unref (taglist); } static GstFlowReturn diff --git a/ext/amrnb/Makefile.in b/ext/amrnb/Makefile.in index ae6013a..934d3a0 100644 --- a/ext/amrnb/Makefile.in +++ b/ext/amrnb/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_LDFLAGS = @GIO_LDFLAGS@ 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/amrwbdec/Makefile.in b/ext/amrwbdec/Makefile.in index 20efb8e..adc413d 100644 --- a/ext/amrwbdec/Makefile.in +++ b/ext/amrwbdec/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, @@ -236,7 +236,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/cdio/Makefile.in b/ext/cdio/Makefile.in index 7590b93..cce73c0 100644 --- a/ext/cdio/Makefile.in +++ b/ext/cdio/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, @@ -235,7 +235,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/dvdread/Makefile.in b/ext/dvdread/Makefile.in index 76d3760..237efd3 100644 --- a/ext/dvdread/Makefile.in +++ b/ext/dvdread/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, @@ -234,7 +234,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/dvdread/dvdreadsrc.c b/ext/dvdread/dvdreadsrc.c index 7140983..ca0bf55 100644 --- a/ext/dvdread/dvdreadsrc.c +++ b/ext/dvdread/dvdreadsrc.c @@ -1550,35 +1550,39 @@ static gboolean gst_dvd_read_src_src_query (GstBaseSrc * basesrc, GstQuery * query) { GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc); - gboolean started; gboolean res = TRUE; - GST_LOG_OBJECT (src, "handling %s query", - gst_query_type_get_name (GST_QUERY_TYPE (query))); - - GST_OBJECT_LOCK (src); - started = (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)); - GST_OBJECT_UNLOCK (src); - - if (!started) { - GST_DEBUG_OBJECT (src, "query failed: not started"); - return FALSE; - } + GST_LOG_OBJECT (src, "handling %s query", GST_QUERY_TYPE_NAME (query)); switch (GST_QUERY_TYPE (query)) { case GST_QUERY_DURATION: GST_OBJECT_LOCK (src); - res = gst_dvd_read_src_do_duration_query (src, query); + if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) { + res = gst_dvd_read_src_do_duration_query (src, query); + } else { + GST_DEBUG_OBJECT (src, "query failed: not started"); + res = FALSE; + } GST_OBJECT_UNLOCK (src); break; case GST_QUERY_POSITION: GST_OBJECT_LOCK (src); - res = gst_dvd_read_src_do_position_query (src, query); + if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) { + res = gst_dvd_read_src_do_position_query (src, query); + } else { + GST_DEBUG_OBJECT (src, "query failed: not started"); + res = FALSE; + } GST_OBJECT_UNLOCK (src); break; case GST_QUERY_CONVERT: GST_OBJECT_LOCK (src); - res = gst_dvd_read_src_do_convert_query (src, query); + if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) { + res = gst_dvd_read_src_do_convert_query (src, query); + } else { + GST_DEBUG_OBJECT (src, "query failed: not started"); + res = FALSE; + } GST_OBJECT_UNLOCK (src); break; default: @@ -1770,7 +1774,7 @@ plugin_init (GstPlugin * plugin) bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #endif /* ENABLE_NLS */ - if (!gst_element_register (plugin, "dvdreadsrc", GST_RANK_SECONDARY, + if (!gst_element_register (plugin, "dvdreadsrc", GST_RANK_NONE, GST_TYPE_DVD_READ_SRC)) { return FALSE; } diff --git a/ext/lame/Makefile.in b/ext/lame/Makefile.in index 61ee885..f380e41 100644 --- a/ext/lame/Makefile.in +++ b/ext/lame/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, @@ -236,7 +236,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/lame/gstlamemp3enc.c b/ext/lame/gstlamemp3enc.c index c2b0871..4955495 100644 --- a/ext/lame/gstlamemp3enc.c +++ b/ext/lame/gstlamemp3enc.c @@ -375,7 +375,7 @@ gst_lamemp3enc_set_format (GstAudioEncoder * enc, GstAudioInfo * info) if (tags) { gst_audio_encoder_merge_tags (enc, tags, GST_TAG_MERGE_REPLACE); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); } return TRUE; @@ -383,7 +383,7 @@ gst_lamemp3enc_set_format (GstAudioEncoder * enc, GstAudioInfo * info) zero_output_rate: { if (tags) - gst_tag_list_free (tags); + gst_tag_list_unref (tags); GST_ELEMENT_ERROR (lame, LIBRARY, SETTINGS, (NULL), ("LAME mp3 audio decided on a zero sample rate")); return FALSE; @@ -819,7 +819,7 @@ gst_lamemp3enc_setup (GstLameMP3Enc * lame, GstTagList ** tags) if ((command) < 0) { \ GST_ERROR_OBJECT (lame, "setup failed: " G_STRINGIFY (command)); \ if (*tags) { \ - gst_tag_list_free (*tags); \ + gst_tag_list_unref (*tags); \ *tags = NULL; \ } \ return FALSE; \ diff --git a/ext/mad/Makefile.in b/ext/mad/Makefile.in index 6881481..697f993 100644 --- a/ext/mad/Makefile.in +++ b/ext/mad/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, @@ -235,7 +235,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/mpeg2dec/Makefile.in b/ext/mpeg2dec/Makefile.in index f5a3d4e..e186135 100644 --- a/ext/mpeg2dec/Makefile.in +++ b/ext/mpeg2dec/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, @@ -234,7 +234,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/mpeg2dec/gstmpeg2dec.c b/ext/mpeg2dec/gstmpeg2dec.c index c1f93ee..90ddf22 100644 --- a/ext/mpeg2dec/gstmpeg2dec.c +++ b/ext/mpeg2dec/gstmpeg2dec.c @@ -26,6 +26,9 @@ #include "gstmpeg2dec.h" +#include <gst/video/gstvideometa.h> +#include <gst/video/gstvideopool.h> + /* 16byte-aligns a buffer for libmpeg2 */ #define ALIGN_16(p) ((void *)(((uintptr_t)(p) + 15) & ~((uintptr_t)15))) @@ -42,24 +45,15 @@ typedef gint mpeg2_state_t; #define STATE_BUFFER 0 #endif -GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); GST_DEBUG_CATEGORY_STATIC (mpeg2dec_debug); #define GST_CAT_DEFAULT (mpeg2dec_debug) +GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE); /* Send a warning message about decoding errors after receiving this many * STATE_INVALID return values from mpeg2_parse. -1 means never. */ #define WARN_THRESHOLD (5) -//#define enable_user_data -#ifdef enable_user_data -static GstStaticPadTemplate user_data_template_factory = -GST_STATIC_PAD_TEMPLATE ("user_data", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); -#endif - static GstStaticPadTemplate sink_template_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, @@ -73,112 +67,73 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw, " - "format = (string) { I420, Y42B, Y444 }, " + "format = (string) { YV12, I420, Y42B, Y444 }, " "width = (int) [ 16, 4096 ], " "height = (int) [ 16, 4096 ], " "framerate = (fraction) [ 0/1, 2147483647/1 ]") ); -static void gst_mpeg2dec_finalize (GObject * object); -static void gst_mpeg2dec_reset (GstMpeg2dec * mpeg2dec); - -static gboolean gst_mpeg2dec_src_event (GstPad * pad, GstObject * parent, - GstEvent * event); -static GstStateChangeReturn gst_mpeg2dec_change_state (GstElement * element, - GstStateChange transition); - -static gboolean gst_mpeg2dec_sink_event (GstPad * pad, GstObject * parent, - GstEvent * event); -static gboolean gst_mpeg2dec_setcaps (GstPad * pad, GstCaps * caps); -static GstFlowReturn gst_mpeg2dec_chain (GstPad * pad, GstObject * parent, - GstBuffer * buf); - -static void clear_buffers (GstMpeg2dec * mpeg2dec); - -//static gboolean gst_mpeg2dec_sink_query (GstPad * pad, GstObject * parent, GstQuery * query); - -#if 0 -static const GstFormat *gst_mpeg2dec_get_formats (GstPad * pad); -#endif - -#if 0 -static const GstEventMask *gst_mpeg2dec_get_event_masks (GstPad * pad); -#endif - -static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf, - GstVideoFrame * frame); +#define gst_mpeg2dec_parent_class parent_class +G_DEFINE_TYPE (GstMpeg2dec, gst_mpeg2dec, GST_TYPE_VIDEO_DECODER); -/*static guint gst_mpeg2dec_signals[LAST_SIGNAL] = { 0 };*/ +static void gst_mpeg2dec_finalize (GObject * object); -#define gst_mpeg2dec_parent_class parent_class -G_DEFINE_TYPE (GstMpeg2dec, gst_mpeg2dec, GST_TYPE_ELEMENT); +/* GstVideoDecoder base class method */ +static gboolean gst_mpeg2dec_open (GstVideoDecoder * decoder); +static gboolean gst_mpeg2dec_close (GstVideoDecoder * decoder); +static gboolean gst_mpeg2dec_start (GstVideoDecoder * decoder); +static gboolean gst_mpeg2dec_stop (GstVideoDecoder * decoder); +static gboolean gst_mpeg2dec_set_format (GstVideoDecoder * decoder, + GstVideoCodecState * state); +static gboolean gst_mpeg2dec_reset (GstVideoDecoder * decoder, gboolean hard); +static GstFlowReturn gst_mpeg2dec_finish (GstVideoDecoder * decoder); +static GstFlowReturn gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder, + GstVideoCodecFrame * frame); +static gboolean gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder, + GstQuery * query); + +static void gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec); +static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, + GstVideoCodecFrame * in_frame, GstVideoFrame * in_vframe); static void gst_mpeg2dec_class_init (GstMpeg2decClass * klass) { - GObjectClass *gobject_class; - GstElementClass *gstelement_class; - - gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass); gobject_class->finalize = gst_mpeg2dec_finalize; - gst_element_class_add_pad_template (gstelement_class, + gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template_factory)); - gst_element_class_add_pad_template (gstelement_class, + gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template_factory)); -#ifdef enable_user_data - gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&user_data_template_factory)); -#endif - gst_element_class_set_static_metadata (gstelement_class, + gst_element_class_set_static_metadata (element_class, "mpeg1 and mpeg2 video decoder", "Codec/Decoder/Video", "Uses libmpeg2 to decode MPEG video streams", - "Wim Taymans <wim.taymans@gmail.com>"); - - gstelement_class->change_state = gst_mpeg2dec_change_state; + "Wim Taymans <wim.taymans@chello.be>"); + + video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_mpeg2dec_open); + video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_mpeg2dec_close); + video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_mpeg2dec_start); + video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg2dec_stop); + video_decoder_class->reset = GST_DEBUG_FUNCPTR (gst_mpeg2dec_reset); + video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_mpeg2dec_set_format); + video_decoder_class->handle_frame = + GST_DEBUG_FUNCPTR (gst_mpeg2dec_handle_frame); + video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_mpeg2dec_finish); + video_decoder_class->decide_allocation = + GST_DEBUG_FUNCPTR (gst_mpeg2dec_decide_allocation); GST_DEBUG_CATEGORY_INIT (mpeg2dec_debug, "mpeg2dec", 0, - "MPEG2 decoder element"); + "MPEG-2 Video Decoder"); } static void gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec) { - /* create the sink and src pads */ - mpeg2dec->sinkpad = - gst_pad_new_from_static_template (&sink_template_factory, "sink"); - gst_pad_set_chain_function (mpeg2dec->sinkpad, - GST_DEBUG_FUNCPTR (gst_mpeg2dec_chain)); -#if 0 - gst_pad_set_query_function (mpeg2dec->sinkpad, - GST_DEBUG_FUNCPTR (gst_mpeg2dec_get_sink_query)); -#endif - gst_pad_set_event_function (mpeg2dec->sinkpad, - GST_DEBUG_FUNCPTR (gst_mpeg2dec_sink_event)); - gst_element_add_pad (GST_ELEMENT (mpeg2dec), mpeg2dec->sinkpad); - - mpeg2dec->srcpad = - gst_pad_new_from_static_template (&src_template_factory, "src"); - gst_pad_set_event_function (mpeg2dec->srcpad, - GST_DEBUG_FUNCPTR (gst_mpeg2dec_src_event)); -#if 0 - gst_pad_set_query_function (mpeg2dec->srcpad, - GST_DEBUG_FUNCPTR (gst_mpeg2dec_src_query)); -#endif - gst_pad_use_fixed_caps (mpeg2dec->srcpad); - gst_element_add_pad (GST_ELEMENT (mpeg2dec), mpeg2dec->srcpad); - -#ifdef enable_user_data - mpeg2dec->userdatapad = - gst_pad_new_from_static_template (&user_data_template_factory, - "user_data"); - gst_element_add_pad (GST_ELEMENT (mpeg2dec), mpeg2dec->userdatapad); -#endif - - mpeg2dec->error_count = 0; - mpeg2dec->can_allocate_aligned = TRUE; + gst_video_decoder_set_packetized (GST_VIDEO_DECODER (mpeg2dec), TRUE); /* initialize the mpeg2dec acceleration */ } @@ -193,75 +148,213 @@ gst_mpeg2dec_finalize (GObject * object) mpeg2_close (mpeg2dec->decoder); mpeg2dec->decoder = NULL; } - clear_buffers (mpeg2dec); + + gst_mpeg2dec_clear_buffers (mpeg2dec); g_free (mpeg2dec->dummybuf[3]); mpeg2dec->dummybuf[3] = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); } -static void -gst_mpeg2dec_reset (GstMpeg2dec * mpeg2dec) +static gboolean +gst_mpeg2dec_open (GstVideoDecoder * decoder) +{ + GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder); + + mpeg2_accel (MPEG2_ACCEL_DETECT); + if ((mpeg2dec->decoder = mpeg2_init ()) == NULL) + return FALSE; + mpeg2dec->info = mpeg2_info (mpeg2dec->decoder); + + return TRUE; +} + +static gboolean +gst_mpeg2dec_close (GstVideoDecoder * decoder) +{ + GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder); + + if (mpeg2dec->decoder) { + mpeg2_close (mpeg2dec->decoder); + mpeg2dec->decoder = NULL; + mpeg2dec->info = NULL; + } + gst_mpeg2dec_clear_buffers (mpeg2dec); + + return TRUE; +} + +static gboolean +gst_mpeg2dec_start (GstVideoDecoder * decoder) +{ + return gst_mpeg2dec_reset (decoder, TRUE); +} + +static gboolean +gst_mpeg2dec_stop (GstVideoDecoder * decoder) +{ + GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder); + + if (mpeg2dec->input_state) { + gst_video_codec_state_unref (mpeg2dec->input_state); + mpeg2dec->input_state = NULL; + } + return gst_mpeg2dec_reset (decoder, TRUE); +} + +static gboolean +gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state) +{ + GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder); + + /* Save input state to be used as reference for output state */ + if (mpeg2dec->input_state) + gst_video_codec_state_unref (mpeg2dec->input_state); + mpeg2dec->input_state = gst_video_codec_state_ref (state); + + return TRUE; +} + +static gboolean +gst_mpeg2dec_reset (GstVideoDecoder * decoder, gboolean hard) { + GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder); + + GST_DEBUG_OBJECT (mpeg2dec, "%s", hard ? "hard" : "soft"); + /* reset the initial video state */ - gst_video_info_init (&mpeg2dec->vinfo); - gst_segment_init (&mpeg2dec->segment, GST_FORMAT_UNDEFINED); mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE; - mpeg2dec->frame_period = 0; - mpeg2dec->need_sequence = TRUE; - mpeg2dec->next_time = -1; - mpeg2dec->offset = 0; - mpeg2dec->error_count = 0; - mpeg2dec->can_allocate_aligned = TRUE; - mpeg2_reset (mpeg2dec->decoder, 1); + mpeg2_reset (mpeg2dec->decoder, hard); + mpeg2_skip (mpeg2dec->decoder, 1); + + gst_mpeg2dec_clear_buffers (mpeg2dec); + + return TRUE; } -static void -gst_mpeg2dec_qos_reset (GstMpeg2dec * mpeg2dec) +static GstFlowReturn +gst_mpeg2dec_finish (GstVideoDecoder * decoder) +{ + return GST_FLOW_OK; +} + +static gboolean +gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query) { - GST_OBJECT_LOCK (mpeg2dec); - mpeg2dec->proportion = 1.0; - mpeg2dec->earliest_time = -1; - mpeg2dec->dropped = 0; - mpeg2dec->processed = 0; - GST_OBJECT_UNLOCK (mpeg2dec); + GstMpeg2dec *dec = GST_MPEG2DEC (decoder); + GstVideoCodecState *state; + GstBufferPool *pool; + guint size, min, max; + GstStructure *config; + GstAllocator *allocator; + GstAllocationParams params; + gboolean update_allocator; + + /* Set allocation parameters to guarantee 16-byte aligned output buffers */ + if (gst_query_get_n_allocation_params (query) > 0) { + gst_query_parse_nth_allocation_param (query, 0, &allocator, ¶ms); + update_allocator = TRUE; + } else { + allocator = NULL; + gst_allocation_params_init (¶ms); + update_allocator = FALSE; + } + + params.align = MAX (params.align, 15); + + if (update_allocator) + gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms); + else + gst_query_add_allocation_param (query, allocator, ¶ms); + if (allocator) + gst_object_unref (allocator); + + /* Now chain up to the parent class to guarantee that we can + * get a buffer pool from the query */ + if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder, + query)) + return FALSE; + + state = gst_video_decoder_get_output_state (decoder); + + gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max); + + dec->has_cropping = FALSE; + config = gst_buffer_pool_get_config (pool); + 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); + dec->has_cropping = + gst_query_find_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE, + NULL); + } + + if (dec->has_cropping) { + GstCaps *caps; + + /* Calculate uncropped size */ + size = MAX (size, dec->decoded_info.size); + caps = gst_video_info_to_caps (&dec->decoded_info); + gst_buffer_pool_config_set_params (config, caps, size, min, max); + gst_caps_unref (caps); + } + + gst_buffer_pool_set_config (pool, config); + + gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); + + gst_object_unref (pool); + gst_video_codec_state_unref (state); + + return TRUE; } static GstFlowReturn -gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf, - GstVideoFrame * frame) +gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstVideoCodecFrame * in_frame, + GstVideoFrame * input_vframe) { + GstVideoCodecState *state; + GstVideoInfo *info; + GstVideoInfo *dinfo; + guint c, n_planes; + GstVideoFrame output_frame; GstFlowReturn ret; - GstBuffer *outbuf; - GstVideoFrame outframe; - guint i, n_planes; - ret = gst_buffer_pool_acquire_buffer (dec->pool, &outbuf, NULL); - if (G_UNLIKELY (ret != GST_FLOW_OK)) - return ret;; + state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (dec)); + info = &state->info; + dinfo = &dec->decoded_info; GST_CAT_LOG_OBJECT (GST_CAT_PERFORMANCE, dec, - "cropping input buffer to output buffer"); - - gst_video_frame_map (&outframe, &dec->cinfo, outbuf, GST_MAP_WRITE); + "Copying input buffer %ux%u (%u) to output buffer " + "%ux%u (%u)", dinfo->width, dinfo->height, + dinfo->size, info->width, info->height, info->size); + + ret = + gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (dec), + in_frame); + if (ret != GST_FLOW_OK) + goto beach; - n_planes = GST_VIDEO_FRAME_N_PLANES (&outframe); + if (!gst_video_frame_map (&output_frame, info, in_frame->output_buffer, + GST_MAP_WRITE)) + goto map_fail; - for (i = 0; i < n_planes; i++) { + n_planes = GST_VIDEO_FRAME_N_PLANES (&output_frame); + for (c = 0; c < n_planes; c++) { guint w, h, j; guint8 *sp, *dp; gint ss, ds; - sp = GST_VIDEO_FRAME_PLANE_DATA (frame, i); - dp = GST_VIDEO_FRAME_PLANE_DATA (&outframe, i); + sp = GST_VIDEO_FRAME_PLANE_DATA (input_vframe, c); + dp = GST_VIDEO_FRAME_PLANE_DATA (&output_frame, c); - ss = GST_VIDEO_FRAME_PLANE_STRIDE (frame, i); - ds = GST_VIDEO_FRAME_PLANE_STRIDE (&outframe, i); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (input_vframe, c); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (&output_frame, c); w = MIN (ABS (ss), ABS (ds)); - h = GST_VIDEO_FRAME_COMP_HEIGHT (&outframe, i); + h = GST_VIDEO_FRAME_COMP_HEIGHT (&output_frame, c); - GST_CAT_DEBUG (GST_CAT_PERFORMANCE, "copy plane %u, w:%u h:%u ", i, w, h); + GST_CAT_DEBUG (GST_CAT_PERFORMANCE, "copy plane %u, w:%u h:%u ", c, w, h); for (j = 0; j < h; j++) { memcpy (dp, sp, w); @@ -269,94 +362,192 @@ gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf, sp += ss; } } - gst_video_frame_unmap (&outframe); - gst_buffer_copy_into (outbuf, *buf, - GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS, 0, -1); + gst_video_frame_unmap (&output_frame); - gst_buffer_unref (*buf); - *buf = outbuf; + GST_BUFFER_FLAGS (in_frame->output_buffer) = + GST_BUFFER_FLAGS (input_vframe->buffer); - return GST_FLOW_OK; +beach: + gst_video_codec_state_unref (state); + + return ret; + +map_fail: + { + GST_ERROR_OBJECT (dec, "Failed to map output frame"); + gst_video_codec_state_unref (state); + return GST_FLOW_ERROR; + } +} + +static void +frame_user_data_destroy_notify (GstBuffer * buf) +{ + GST_DEBUG ("Releasing buffer %p", buf); + if (buf) + gst_buffer_unref (buf); } static GstFlowReturn -gst_mpeg2dec_negotiate_pool (GstMpeg2dec * dec, GstCaps * caps, - GstVideoInfo * vinfo, GstVideoInfo * cinfo) +gst_mpeg2dec_alloc_sized_buf (GstMpeg2dec * mpeg2dec, guint size, + GstVideoCodecFrame * frame, GstBuffer ** buffer) { - GstQuery *query; - GstBufferPool *pool; - guint size, min, max; - GstStructure *config; - GstCaps *pcaps; + GstFlowReturn ret = GST_FLOW_OK; + GstVideoCodecState *state; - /* find a pool for the negotiated caps now */ - query = gst_query_new_allocation (caps, TRUE); + state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (mpeg2dec)); - if (gst_pad_peer_query (dec->srcpad, query)) { - /* check if downstream supports cropping */ - dec->has_cropping = - gst_query_has_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE); + if (!mpeg2dec->need_cropping || mpeg2dec->has_cropping) { + ret = + gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (mpeg2dec), + frame); + *buffer = frame->output_buffer; } else { - /* use the query default then */ - GST_DEBUG_OBJECT (dec, "didn't get downstream ALLOCATION hints"); - dec->has_cropping = FALSE; - } + GstAllocationParams params = { 0, 15, 0, 0 }; - if (gst_query_get_n_allocation_pools (query) > 0) { - /* we got configuration from our peer, parse them */ - gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max); - } else { - pool = NULL; - size = 0; - min = max = 0; + *buffer = gst_buffer_new_allocate (NULL, size, ¶ms); + gst_video_codec_frame_set_user_data (frame, *buffer, + (GDestroyNotify) frame_user_data_destroy_notify); } - GST_DEBUG_OBJECT (dec, - "size:%d, min:%d, max:%d,pool:%p", size, min, max, pool); - GST_DEBUG_OBJECT (dec, "downstream cropping %d", dec->has_cropping); + gst_video_codec_state_unref (state); - if (pool == NULL) { - /* we did not get a pool, make one ourselves then */ - pool = gst_video_buffer_pool_new (); - } + return ret; +} - if (dec->pool) { - gst_buffer_pool_set_active (dec->pool, FALSE); - gst_object_unref (dec->pool); +typedef struct +{ + gint id; + GstVideoFrame frame; +} GstMpeg2DecBuffer; + +static void +gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec) +{ + GList *l; + while ((l = g_list_first (mpeg2dec->buffers))) { + GstMpeg2DecBuffer *mbuf = l->data; + gst_video_frame_unmap (&mbuf->frame); + g_slice_free (GstMpeg2DecBuffer, mbuf); + mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l); } - dec->pool = pool; +} + +static void +gst_mpeg2dec_save_buffer (GstMpeg2dec * mpeg2dec, gint id, + GstVideoFrame * frame) +{ + GstMpeg2DecBuffer *mbuf; + + GST_LOG_OBJECT (mpeg2dec, "Saving local info for frame %d", id); - if (dec->need_cropping && dec->has_cropping) { - /* we can crop, configure the pool with buffers of caps and size of the - * decoded picture size and then crop them with metadata */ - pcaps = gst_video_info_to_caps (vinfo); - size = MAX (size, GST_VIDEO_INFO_SIZE (vinfo)); + mbuf = g_slice_new0 (GstMpeg2DecBuffer); + mbuf->id = id; + mbuf->frame = *frame; + + mpeg2dec->buffers = g_list_prepend (mpeg2dec->buffers, mbuf); +} + +static gint +gst_mpeg2dec_buffer_compare (GstMpeg2DecBuffer * mbuf, gconstpointer id) +{ + if (mbuf->id == GPOINTER_TO_INT (id)) + return 0; + return -1; +} + +static void +gst_mpeg2dec_discard_buffer (GstMpeg2dec * mpeg2dec, gint id) +{ + GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id), + (GCompareFunc) gst_mpeg2dec_buffer_compare); + + if (l) { + GstMpeg2DecBuffer *mbuf = l->data; + gst_video_frame_unmap (&mbuf->frame); + g_slice_free (GstMpeg2DecBuffer, mbuf); + mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l); + GST_LOG_OBJECT (mpeg2dec, "Discarded local info for frame %d", id); } else { - /* no cropping, use cropped videoinfo */ - pcaps = gst_caps_ref (caps); - size = MAX (size, GST_VIDEO_INFO_SIZE (cinfo)); + GST_WARNING ("Could not find buffer %d, will be leaked until next reset", + id); } +} - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (config, pcaps, size, min, max); - gst_caps_unref (pcaps); +static GstVideoFrame * +gst_mpeg2dec_get_buffer (GstMpeg2dec * mpeg2dec, gint id) +{ + GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id), + (GCompareFunc) gst_mpeg2dec_buffer_compare); - if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) { - /* 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. */ - gst_buffer_pool_config_add_option (config, - GST_BUFFER_POOL_OPTION_VIDEO_META); + if (l) { + GstMpeg2DecBuffer *mbuf = l->data; + return &mbuf->frame; } - gst_buffer_pool_set_config (pool, config); - /* and activate */ - gst_buffer_pool_set_active (pool, TRUE); + return NULL; +} - gst_query_unref (query); +static GstFlowReturn +gst_mpeg2dec_alloc_buffer (GstMpeg2dec * mpeg2dec, GstVideoCodecFrame * frame, + GstBuffer ** buffer) +{ + GstFlowReturn ret; + GstVideoFrame vframe; + guint8 *buf[3]; - return GST_FLOW_OK; + ret = + gst_mpeg2dec_alloc_sized_buf (mpeg2dec, mpeg2dec->decoded_info.size, + frame, buffer); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + goto beach; + + if (mpeg2dec->need_cropping && mpeg2dec->has_cropping) { + GstVideoCropMeta *crop; + GstVideoCodecState *state; + GstVideoInfo *vinfo; + + state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (mpeg2dec)); + vinfo = &state->info; + + crop = gst_buffer_add_video_crop_meta (frame->output_buffer); + /* we can do things slightly more efficient when we know that + * downstream understands clipping */ + crop->x = 0; + crop->y = 0; + crop->width = vinfo->width; + crop->height = vinfo->height; + + gst_video_codec_state_unref (state); + } + + if (!gst_video_frame_map (&vframe, &mpeg2dec->decoded_info, *buffer, + GST_MAP_READ | GST_MAP_WRITE)) + goto map_fail; + + buf[0] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 0); + buf[1] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 1); + buf[2] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 2); + + GST_DEBUG_OBJECT (mpeg2dec, "set_buf: %p %p %p, frame %i", + buf[0], buf[1], buf[2], frame->system_frame_number); + + /* Note: We use a non-null 'id' value to make the distinction + * between the dummy buffers (which have an id of NULL) and the + * ones we did */ + mpeg2_set_buf (mpeg2dec->decoder, buf, + GINT_TO_POINTER (frame->system_frame_number + 1)); + gst_mpeg2dec_save_buffer (mpeg2dec, frame->system_frame_number, &vframe); + +beach: + return ret; + +map_fail: + { + GST_ERROR_OBJECT (mpeg2dec, "Failed to map frame"); + return GST_FLOW_ERROR; + } } static void @@ -365,22 +556,26 @@ init_dummybuf (GstMpeg2dec * mpeg2dec) g_free (mpeg2dec->dummybuf[3]); /* libmpeg2 needs 16 byte aligned buffers... care for this here */ - mpeg2dec->dummybuf[3] = g_malloc0 (mpeg2dec->size + 15); + mpeg2dec->dummybuf[3] = g_malloc0 (mpeg2dec->decoded_info.size + 15); mpeg2dec->dummybuf[0] = ALIGN_16 (mpeg2dec->dummybuf[3]); - mpeg2dec->dummybuf[1] = mpeg2dec->dummybuf[0] + mpeg2dec->u_offs; - mpeg2dec->dummybuf[2] = mpeg2dec->dummybuf[0] + mpeg2dec->v_offs; + mpeg2dec->dummybuf[1] = + mpeg2dec->dummybuf[0] + + GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 1); + mpeg2dec->dummybuf[2] = + mpeg2dec->dummybuf[0] + + GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 2); } static GstFlowReturn handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) { GstFlowReturn ret = GST_FLOW_OK; + GstClockTime latency; const mpeg2_sequence_t *sequence; - gint par_n, par_d; - GstVideoInfo vinfo, cinfo; + GstVideoCodecState *state; + GstVideoInfo *dinfo = &mpeg2dec->decoded_info; + GstVideoInfo *vinfo; GstVideoFormat format; - GstCaps *caps; - gint y_size, uv_size; sequence = info->sequence; @@ -407,150 +602,127 @@ handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) mpeg2dec->need_cropping = FALSE; } - y_size = sequence->width * sequence->height; /* get subsampling */ if (sequence->chroma_width < sequence->width) { /* horizontally subsampled */ if (sequence->chroma_height < sequence->height) { /* and vertically subsamples */ format = GST_VIDEO_FORMAT_I420; - uv_size = y_size >> 2; } else { format = GST_VIDEO_FORMAT_Y42B; - uv_size = y_size >> 1; } } else { /* not subsampled */ format = GST_VIDEO_FORMAT_Y444; - uv_size = y_size; - } - - /* calculate size and offsets of the decoded frames */ - mpeg2dec->size = y_size + 2 * (uv_size); - mpeg2dec->u_offs = y_size; - mpeg2dec->v_offs = y_size + uv_size; - - /* we store the codec size before cropping */ - gst_video_info_init (&vinfo); - gst_video_info_set_format (&vinfo, format, sequence->width, sequence->height); - - /* sink caps par overrides sequence PAR */ - if (mpeg2dec->have_par) { - par_n = mpeg2dec->in_par_n; - par_d = mpeg2dec->in_par_d; - GST_DEBUG_OBJECT (mpeg2dec, "using sink par %d:%d", par_n, par_d); - } else { - par_n = sequence->pixel_width; - par_d = sequence->pixel_height; - GST_DEBUG_OBJECT (mpeg2dec, "using encoded par %d:%d", par_n, par_d); } - if (par_n == 0 || par_d == 0) { - if (!gst_util_fraction_multiply (4, 3, sequence->picture_height, - sequence->picture_width, &par_n, &par_d)) - par_n = par_d = 1; - - GST_WARNING_OBJECT (mpeg2dec, "Unknown par, assuming %d:%d", par_n, par_d); + state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (mpeg2dec), + format, sequence->picture_width, sequence->picture_height, + mpeg2dec->input_state); + vinfo = &state->info; + + /* If we don't have a valid upstream PAR override it */ + if (GST_VIDEO_INFO_PAR_N (vinfo) == 1 && + GST_VIDEO_INFO_PAR_D (vinfo) == 1 && + sequence->pixel_width != 0 && sequence->pixel_height != 0) { + GST_DEBUG_OBJECT (mpeg2dec, "Setting PAR %d x %d", + sequence->pixel_width, sequence->pixel_height); + vinfo->par_n = sequence->pixel_width; + vinfo->par_d = sequence->pixel_height; } - vinfo.par_n = par_n; - vinfo.par_d = par_d; - - /* set framerate */ - vinfo.fps_n = 27000000; - vinfo.fps_d = sequence->frame_period; - mpeg2dec->frame_period = sequence->frame_period * GST_USECOND / 27; + vinfo->fps_n = 27000000; + vinfo->fps_d = sequence->frame_period; if (!(sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE)) - vinfo.interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED; + vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED; else - vinfo.interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE; + vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE; - vinfo.chroma_site = GST_VIDEO_CHROMA_SITE_MPEG2; - vinfo.colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235; + vinfo->chroma_site = GST_VIDEO_CHROMA_SITE_MPEG2; + vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235; if (sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION) { /* do color description */ switch (sequence->colour_primaries) { case 1: - vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709; + vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709; break; case 4: - vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M; + vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M; break; case 5: - vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG; + vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG; break; case 6: - vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M; + vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M; break; case 7: - vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M; + vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M; break; /* 0 forbidden */ /* 2 unspecified */ /* 3 reserved */ /* 8-255 reseved */ default: - vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN; + vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN; break; } /* matrix coefficients */ switch (sequence->matrix_coefficients) { case 1: - vinfo.colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709; + vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709; break; case 4: - vinfo.colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC; + vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC; break; case 5: case 6: - vinfo.colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601; + vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601; break; case 7: - vinfo.colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M; + vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M; break; /* 0 forbidden */ /* 2 unspecified */ /* 3 reserved */ /* 8-255 reseved */ default: - vinfo.colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN; + vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN; break; } /* transfer characteristics */ switch (sequence->transfer_characteristics) { case 1: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_BT709; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709; break; case 4: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22; break; case 5: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28; break; case 6: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_BT709; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709; break; case 7: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M; break; case 8: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10; break; /* 0 forbidden */ /* 2 unspecified */ /* 3 reserved */ /* 9-255 reseved */ default: - vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN; + vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN; break; } } GST_DEBUG_OBJECT (mpeg2dec, - "sequence flags: %d, frame period: %d (%g), frame rate: %d/%d", - sequence->flags, sequence->frame_period, - (double) (mpeg2dec->frame_period) / GST_SECOND, vinfo.fps_n, vinfo.fps_d); + "sequence flags: %d, frame period: %d, frame rate: %d/%d", + sequence->flags, sequence->frame_period, vinfo->fps_n, vinfo->fps_d); GST_DEBUG_OBJECT (mpeg2dec, "profile: %02x, colour_primaries: %d", sequence->profile_level_id, sequence->colour_primaries); GST_DEBUG_OBJECT (mpeg2dec, "transfer chars: %d, matrix coef: %d", @@ -563,20 +735,23 @@ handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) sequence->flags & SEQ_FLAG_LOW_DELAY, sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION); - /* for the output caps we always take the cropped dimensions */ - cinfo = vinfo; - gst_video_info_set_format (&cinfo, GST_VIDEO_INFO_FORMAT (&vinfo), - sequence->picture_width, sequence->picture_height); - caps = gst_video_info_to_caps (&cinfo); - gst_pad_set_caps (mpeg2dec->srcpad, caps); + /* we store the codec size before cropping */ + *dinfo = *vinfo; + gst_video_info_set_format (dinfo, format, sequence->width, sequence->height); + + /* Mpeg2dec has 2 frame latency to produce a picture and 1 frame latency in + * it's parser */ + latency = gst_util_uint64_scale (3, vinfo->fps_d, vinfo->fps_n); + gst_video_decoder_set_latency (GST_VIDEO_DECODER (mpeg2dec), latency, + latency); - gst_mpeg2dec_negotiate_pool (mpeg2dec, caps, &vinfo, &cinfo); - gst_caps_unref (caps); + if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (mpeg2dec))) + goto negotiation_fail; - mpeg2dec->vinfo = vinfo; - mpeg2dec->cinfo = cinfo; + gst_video_codec_state_unref (state); mpeg2_custom_fbuf (mpeg2dec->decoder, 1); + init_dummybuf (mpeg2dec); /* Pump in some null buffers, because otherwise libmpeg2 doesn't @@ -584,17 +759,14 @@ handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL); mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL); mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL); + gst_mpeg2dec_clear_buffers (mpeg2dec); - mpeg2dec->need_sequence = FALSE; - -done: return ret; invalid_frame_period: { GST_WARNING_OBJECT (mpeg2dec, "Frame period is 0!"); - ret = GST_FLOW_ERROR; - goto done; + return GST_FLOW_ERROR; } invalid_size: { @@ -602,484 +774,197 @@ invalid_size: sequence->width, sequence->height); return GST_FLOW_ERROR; } -} - -static void -clear_buffers (GstMpeg2dec * mpeg2dec) -{ - gint i; - GstVideoFrame *frame; - - for (i = 0; i < 4; i++) { - frame = &mpeg2dec->ip_frame[i]; - if (frame->buffer) { - gst_video_frame_unmap (frame); - gst_buffer_unref (frame->buffer); - frame->buffer = NULL; - } - } - frame = &mpeg2dec->b_frame; - if (frame->buffer) { - gst_video_frame_unmap (frame); - gst_buffer_unref (frame->buffer); - frame->buffer = NULL; - } -} - -static void -clear_queued (GstMpeg2dec * mpeg2dec) -{ - g_list_foreach (mpeg2dec->queued, (GFunc) gst_mini_object_unref, NULL); - g_list_free (mpeg2dec->queued); - mpeg2dec->queued = NULL; -} - -static GstFlowReturn -flush_queued (GstMpeg2dec * mpeg2dec) -{ - GstFlowReturn res = GST_FLOW_OK; - - while (mpeg2dec->queued) { - GstBuffer *buf = GST_BUFFER_CAST (mpeg2dec->queued->data); - - GST_LOG_OBJECT (mpeg2dec, "pushing buffer %p, timestamp %" - GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT, buf, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (buf))); - /* iterate ouput queue an push downstream */ - res = gst_pad_push (mpeg2dec->srcpad, buf); - - mpeg2dec->queued = g_list_delete_link (mpeg2dec->queued, mpeg2dec->queued); +negotiation_fail: + { + GST_WARNING_OBJECT (mpeg2dec, "Failed to negotiate with downstream"); + return GST_FLOW_ERROR; } - return res; } static GstFlowReturn -handle_picture (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) +handle_picture (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info, + GstVideoCodecFrame * frame) { - gboolean key_frame = FALSE; - GstBuffer *outbuf; - GstVideoFrame *frame; GstFlowReturn ret; gint type; - guint8 *buf[3]; - - if (mpeg2dec->need_cropping && !mpeg2dec->has_cropping) { - GstAllocationParams params = { 0, }; - - /* we need to crop manually */ - params.align = 15; - outbuf = - gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&mpeg2dec->vinfo), - ¶ms); - ret = GST_FLOW_OK; - } else { - ret = gst_buffer_pool_acquire_buffer (mpeg2dec->pool, &outbuf, NULL); - if (G_UNLIKELY (ret != GST_FLOW_OK)) - goto no_buffer; - } - - /* we store the original byteoffset of this picture in the stream here - * because we need it for indexing */ - GST_BUFFER_OFFSET (outbuf) = mpeg2dec->offset; - - if (info->current_picture) { - type = info->current_picture->flags & PIC_MASK_CODING_TYPE; - } else { - type = 0; - } - - GST_DEBUG_OBJECT (mpeg2dec, "handle picture type %d", type); + const gchar *type_str = NULL; + gboolean key_frame = FALSE; + const mpeg2_picture_t *picture = info->current_picture; + GstBuffer *buffer; - key_frame = type == PIC_FLAG_CODING_TYPE_I; + ret = gst_mpeg2dec_alloc_buffer (mpeg2dec, frame, &buffer); + if (ret != GST_FLOW_OK) + return ret; + type = picture->flags & PIC_MASK_CODING_TYPE; switch (type) { case PIC_FLAG_CODING_TYPE_I: + key_frame = TRUE; mpeg2_skip (mpeg2dec->decoder, 0); - if (mpeg2dec->segment.rate < 0.0) { - /* negative rate, flush the queued pictures in reverse */ - GST_DEBUG_OBJECT (mpeg2dec, "flushing queued buffers"); - flush_queued (mpeg2dec); - } - /* fallthrough */ + type_str = "I"; + break; case PIC_FLAG_CODING_TYPE_P: - frame = &mpeg2dec->ip_frame[mpeg2dec->ip_framepos]; - GST_DEBUG_OBJECT (mpeg2dec, "I/P unref %p, ref %p", frame, outbuf); - mpeg2dec->ip_framepos = (mpeg2dec->ip_framepos + 1) & 3; + type_str = "P"; break; case PIC_FLAG_CODING_TYPE_B: - frame = &mpeg2dec->b_frame; - GST_DEBUG_OBJECT (mpeg2dec, "B unref %p, ref %p", frame, outbuf); + type_str = "B"; break; default: - goto unknown_frame; + gst_video_codec_frame_ref (frame); + ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame); + GST_VIDEO_DECODER_ERROR (mpeg2dec, 1, STREAM, DECODE, + ("decoding error"), ("Invalid picture type"), ret); + return ret; } - if (frame->buffer) { - gst_video_frame_unmap (frame); - gst_buffer_unref (frame->buffer); - frame->buffer = NULL; - } - - if (mpeg2dec->need_cropping && mpeg2dec->has_cropping) { - GstVideoCropMeta *crop; + GST_DEBUG_OBJECT (mpeg2dec, "handle picture type %s", type_str); + GST_DEBUG_OBJECT (mpeg2dec, "picture %s, frame %i", + key_frame ? ", kf," : " ", frame->system_frame_number); - crop = gst_buffer_add_video_crop_meta (outbuf); - /* we can do things slightly more efficient when we know that - * downstream understands clipping */ - crop->x = 0; - crop->y = 0; - crop->width = info->sequence->picture_width; - crop->height = info->sequence->picture_height; + if (GST_VIDEO_INFO_IS_INTERLACED (&mpeg2dec->decoded_info)) { + /* This implies SEQ_FLAG_PROGRESSIVE_SEQUENCE is not set */ + if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST) { + GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_FLAG_TFF); + } + if (!(picture->flags & PIC_FLAG_PROGRESSIVE_FRAME)) { + GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_FLAG_INTERLACED); + } +#if MPEG2_RELEASE >= MPEG2_VERSION(0,5,0) + /* repeat field introduced in 0.5.0 */ + if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD) { + GST_BUFFER_FLAG_SET (buffer, GST_VIDEO_BUFFER_FLAG_RFF); + } +#endif } - gst_video_frame_map (frame, &mpeg2dec->vinfo, outbuf, GST_MAP_WRITE); - - buf[0] = GST_VIDEO_FRAME_PLANE_DATA (frame, 0); - buf[1] = GST_VIDEO_FRAME_PLANE_DATA (frame, 1); - buf[2] = GST_VIDEO_FRAME_PLANE_DATA (frame, 2); - - GST_DEBUG_OBJECT (mpeg2dec, "set_buf: %p %p %p, outbuf %p", - buf[0], buf[1], buf[2], outbuf); - - mpeg2_set_buf (mpeg2dec->decoder, buf, frame); - - GST_DEBUG_OBJECT (mpeg2dec, "picture %s, outbuf %p, offset %" - G_GINT64_FORMAT, - key_frame ? ", kf," : " ", outbuf, GST_BUFFER_OFFSET (outbuf) - ); - - if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_PICTURE && key_frame) + if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_PICTURE && key_frame) { mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_KEYFRAME; - - return ret; - -no_buffer: - { - return ret; } -unknown_frame: - { - return ret; - } -} - -/* try to clip the buffer to the segment boundaries */ -static gboolean -clip_buffer (GstMpeg2dec * dec, GstBuffer * buf) -{ - gboolean res = TRUE; - GstClockTime in_ts, in_dur, stop; - guint64 cstart, cstop; - - in_ts = GST_BUFFER_TIMESTAMP (buf); - in_dur = GST_BUFFER_DURATION (buf); - - GST_LOG_OBJECT (dec, - "timestamp:%" GST_TIME_FORMAT " , duration:%" GST_TIME_FORMAT, - GST_TIME_ARGS (in_ts), GST_TIME_ARGS (in_dur)); - - /* can't clip without TIME segment */ - if (dec->segment.format != GST_FORMAT_TIME) - goto beach; - - /* we need a start time */ - if (!GST_CLOCK_TIME_IS_VALID (in_ts)) - goto beach; - - /* generate valid stop, if duration unknown, we have unknown stop */ - stop = - GST_CLOCK_TIME_IS_VALID (in_dur) ? (in_ts + in_dur) : GST_CLOCK_TIME_NONE; - - /* now clip */ - if (!(res = gst_segment_clip (&dec->segment, GST_FORMAT_TIME, - in_ts, stop, &cstart, &cstop))) - goto beach; - /* update timestamp and possibly duration if the clipped stop time is - * valid */ - GST_BUFFER_TIMESTAMP (buf) = cstart; - if (GST_CLOCK_TIME_IS_VALID (cstop)) - GST_BUFFER_DURATION (buf) = cstop - cstart; + GST_DEBUG_OBJECT (mpeg2dec, + "picture: %s %s %s %s %s fields:%d ts:%" + GST_TIME_FORMAT, + (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : " "), + (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : " "), +#if MPEG2_RELEASE >= MPEG2_VERSION(0,5,0) + (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : " "), +#else + "unknown rff", +#endif + (picture->flags & PIC_FLAG_SKIP ? "skip" : " "), + (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : " "), + picture->nb_fields, GST_TIME_ARGS (frame->pts)); -beach: - GST_LOG_OBJECT (dec, "%sdropping", (res ? "not " : "")); - return res; + return ret; } static GstFlowReturn handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) { - GstBuffer *outbuf = NULL; GstFlowReturn ret = GST_FLOW_OK; + GstVideoCodecFrame *frame; const mpeg2_picture_t *picture; gboolean key_frame = FALSE; - GstClockTime time; - GstVideoFrame *frame; - - GST_DEBUG_OBJECT (mpeg2dec, "picture slice/end %p %p %p %p", - info->display_fbuf, - info->display_picture, info->current_picture, - (info->display_fbuf ? info->display_fbuf->id : NULL)); - - if (!info->display_fbuf || !info->display_fbuf->id) - goto no_display; - - frame = (GstVideoFrame *) (info->display_fbuf->id); - outbuf = frame->buffer; + GstVideoCodecState *state; + GST_DEBUG_OBJECT (mpeg2dec, + "fbuf:%p display_picture:%p current_picture:%p fbuf->id:%d", + info->display_fbuf, info->display_picture, info->current_picture, + GPOINTER_TO_INT (info->display_fbuf->id) - 1); + + /* Note, the fbuf-id is shifted by 1 to make the difference between + * NULL values (used by dummy buffers) and 'real' values */ + frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (mpeg2dec), + GPOINTER_TO_INT (info->display_fbuf->id) - 1); + if (!frame) + goto no_frame; picture = info->display_picture; - key_frame = (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_I; GST_DEBUG_OBJECT (mpeg2dec, "picture flags: %d, type: %d, keyframe: %d", picture->flags, picture->flags & PIC_MASK_CODING_TYPE, key_frame); if (key_frame) { - GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT); mpeg2_skip (mpeg2dec->decoder, 0); - } else { - GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT); } if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_KEYFRAME && key_frame) mpeg2dec->discont_state = MPEG2DEC_DISC_NONE; - time = GST_CLOCK_TIME_NONE; - -#if MPEG2_RELEASE < MPEG2_VERSION(0,4,0) - if (picture->flags & PIC_FLAG_PTS) { - time = MPEG_TIME_TO_GST_TIME (picture->pts); - GST_DEBUG_OBJECT (mpeg2dec, "picture pts %" G_GUINT64_FORMAT - ", time %" GST_TIME_FORMAT, picture->pts, GST_TIME_ARGS (time)); - } -#else - if (picture->flags & PIC_FLAG_TAGS) { - guint64 pts = (((guint64) picture->tag2) << 32) | picture->tag; - - time = MPEG_TIME_TO_GST_TIME (pts); - GST_DEBUG_OBJECT (mpeg2dec, "picture tags %" G_GUINT64_FORMAT - ", time %" GST_TIME_FORMAT, pts, GST_TIME_ARGS (time)); - } -#endif - - if (time == GST_CLOCK_TIME_NONE) { - time = mpeg2dec->next_time; - GST_DEBUG_OBJECT (mpeg2dec, "picture didn't have pts"); - } else { - GST_DEBUG_OBJECT (mpeg2dec, - "picture had pts %" GST_TIME_FORMAT ", we had %" - GST_TIME_FORMAT, GST_TIME_ARGS (time), - GST_TIME_ARGS (mpeg2dec->next_time)); - mpeg2dec->next_time = time; + if (picture->flags & PIC_FLAG_SKIP) { + GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of skip flag"); + ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame); + mpeg2_skip (mpeg2dec->decoder, 1); + return ret; } - GST_BUFFER_TIMESTAMP (outbuf) = time; - /* TODO set correct offset here based on frame number */ - if (info->display_picture_2nd) { - GST_BUFFER_DURATION (outbuf) = (picture->nb_fields + - info->display_picture_2nd->nb_fields) * mpeg2dec->frame_period / 2; - } else { - GST_BUFFER_DURATION (outbuf) = - picture->nb_fields * mpeg2dec->frame_period / 2; + if (mpeg2dec->discont_state != MPEG2DEC_DISC_NONE) { + GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, discont state %d", + mpeg2dec->discont_state); + ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame); + return ret; } - mpeg2dec->next_time += GST_BUFFER_DURATION (outbuf); - if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST) - GST_BUFFER_FLAG_SET (outbuf, GST_VIDEO_BUFFER_FLAG_TFF); + state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (mpeg2dec)); -#if MPEG2_RELEASE >= MPEG2_VERSION(0,5,0) - /* repeat field introduced in 0.5.0 */ - if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD) - GST_BUFFER_FLAG_SET (outbuf, GST_VIDEO_BUFFER_FLAG_RFF); -#endif + /* do cropping if the target region is smaller than the input one */ + if (mpeg2dec->need_cropping && !mpeg2dec->has_cropping) { + GstVideoFrame *vframe; - GST_DEBUG_OBJECT (mpeg2dec, - "picture: %s %s %s %s %s fields:%d off:%" G_GINT64_FORMAT " ts:%" - GST_TIME_FORMAT, - (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : " "), - (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : " "), -#if MPEG2_RELEASE >= MPEG2_VERSION(0,5,0) - (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : " "), -#else - "unknown rff", -#endif - (picture->flags & PIC_FLAG_SKIP ? "skip" : " "), - (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : " "), - picture->nb_fields, GST_BUFFER_OFFSET (outbuf), - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf))); - - if (picture->flags & PIC_FLAG_SKIP) - goto skip; - - if (mpeg2dec->discont_state != MPEG2DEC_DISC_NONE) - goto drop; - - /* check for clipping */ - if (!clip_buffer (mpeg2dec, outbuf)) - goto clipped; - - if (GST_CLOCK_TIME_IS_VALID (time)) { - gboolean need_skip; - GstClockTime qostime; - - /* qos needs to be done on running time */ - qostime = gst_segment_to_running_time (&mpeg2dec->segment, GST_FORMAT_TIME, - time); - - GST_OBJECT_LOCK (mpeg2dec); - /* check for QoS, don't perform the last steps of getting and - * pushing the buffers that are known to be late. */ - /* FIXME, we can also entirely skip decoding if the next valid buffer is - * known to be after a keyframe (using the granule_shift) */ - need_skip = mpeg2dec->earliest_time != -1 - && qostime <= mpeg2dec->earliest_time; - GST_OBJECT_UNLOCK (mpeg2dec); - - if (need_skip) { - GstMessage *qos_msg; - guint64 stream_time; - gint64 jitter; - - mpeg2dec->dropped++; - - stream_time = - gst_segment_to_stream_time (&mpeg2dec->segment, GST_FORMAT_TIME, - time); - jitter = GST_CLOCK_DIFF (qostime, mpeg2dec->earliest_time); - - qos_msg = - gst_message_new_qos (GST_OBJECT_CAST (mpeg2dec), FALSE, qostime, - stream_time, time, GST_BUFFER_DURATION (outbuf)); - gst_message_set_qos_values (qos_msg, jitter, mpeg2dec->proportion, - 1000000); - gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS, - mpeg2dec->processed, mpeg2dec->dropped); - gst_element_post_message (GST_ELEMENT_CAST (mpeg2dec), qos_msg); - - goto dropping_qos; + if (gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (mpeg2dec), + frame) < 0) { + GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer crop, too late"); + ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame); + goto beach; } - } - - mpeg2dec->processed++; - - /* ref before pushing it out, so we still have the ref in our - * array of buffers */ - gst_buffer_ref (outbuf); - /* do cropping if the target region is smaller than the input one */ - if (mpeg2dec->need_cropping && !mpeg2dec->has_cropping) { GST_DEBUG_OBJECT (mpeg2dec, "cropping buffer"); - ret = gst_mpeg2dec_crop_buffer (mpeg2dec, &outbuf, frame); - if (ret != GST_FLOW_OK) - goto done; + vframe = gst_mpeg2dec_get_buffer (mpeg2dec, frame->system_frame_number); + g_assert (vframe != NULL); + ret = gst_mpeg2dec_crop_buffer (mpeg2dec, frame, vframe); } - if (mpeg2dec->segment.rate >= 0.0) { - /* forward: push right away */ - GST_LOG_OBJECT (mpeg2dec, "pushing buffer %p, timestamp %" - GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT, - outbuf, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf))); - GST_LOG_OBJECT (mpeg2dec, "... with flags %x", GST_BUFFER_FLAGS (outbuf)); - - ret = gst_pad_push (mpeg2dec->srcpad, outbuf); - GST_DEBUG_OBJECT (mpeg2dec, "pushed with result %s", - gst_flow_get_name (ret)); - } else { - /* reverse: queue, we'll push in reverse when we receive the next (previous) - * keyframe. */ - GST_DEBUG_OBJECT (mpeg2dec, "queued frame"); - mpeg2dec->queued = g_list_prepend (mpeg2dec->queued, outbuf); - ret = GST_FLOW_OK; - } -done: + ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (mpeg2dec), frame); + +beach: + gst_video_codec_state_unref (state); return ret; - /* special cases */ -no_display: +no_frame: { - GST_DEBUG_OBJECT (mpeg2dec, "no picture to display"); - return GST_FLOW_OK; - } -skip: - { - GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of skip flag"); - return GST_FLOW_OK; - } -drop: - { - GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, discont state %d", - mpeg2dec->discont_state); - return GST_FLOW_OK; - } -clipped: - { - GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, clipped"); - return GST_FLOW_OK; - } -dropping_qos: - { - GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of QoS"); - return GST_FLOW_OK; + GST_WARNING ("display buffer does not have a valid frame"); + return GST_FLOW_ERROR; } + } static GstFlowReturn -gst_mpeg2dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) +gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder, + GstVideoCodecFrame * frame) { - GstMpeg2dec *mpeg2dec; - GstMapInfo map; - GstClockTime pts; + GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder); + GstBuffer *buf = frame->input_buffer; + GstMapInfo minfo; const mpeg2_info_t *info; mpeg2_state_t state; gboolean done = FALSE; GstFlowReturn ret = GST_FLOW_OK; - mpeg2dec = GST_MPEG2DEC (parent); - - gst_buffer_map (buf, &map, GST_MAP_READ); - pts = GST_BUFFER_TIMESTAMP (buf); + GST_LOG_OBJECT (mpeg2dec, "received frame %d, timestamp %" + GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT, + frame->system_frame_number, + GST_TIME_ARGS (frame->pts), GST_TIME_ARGS (frame->duration)); - if (GST_BUFFER_IS_DISCONT (buf)) { - GST_LOG_OBJECT (mpeg2dec, "DISCONT, reset decoder"); - /* when we receive a discont, reset our state as to not create too much - * distortion in the picture due to missing packets */ - mpeg2_reset (mpeg2dec->decoder, 0); - mpeg2_skip (mpeg2dec->decoder, 1); - mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE; + if (!gst_buffer_map (buf, &minfo, GST_MAP_READ)) { + GST_ERROR_OBJECT (mpeg2dec, "Failed to map input buffer"); + return GST_FLOW_ERROR; } - GST_LOG_OBJECT (mpeg2dec, "received buffer, timestamp %" - GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), - GST_TIME_ARGS (GST_BUFFER_DURATION (buf))); - info = mpeg2dec->info; - mpeg2dec->offset = GST_BUFFER_OFFSET (buf); - - if (pts != GST_CLOCK_TIME_NONE) { - gint64 mpeg_pts = GST_TIME_TO_MPEG_TIME (pts); - - GST_DEBUG_OBJECT (mpeg2dec, - "have pts: %" G_GINT64_FORMAT " (%" GST_TIME_FORMAT ")", - mpeg_pts, GST_TIME_ARGS (MPEG_TIME_TO_GST_TIME (mpeg_pts))); - -#if MPEG2_RELEASE >= MPEG2_VERSION(0,4,0) - mpeg2_tag_picture (mpeg2dec->decoder, mpeg_pts & 0xffffffff, - mpeg_pts >> 32); -#else - mpeg2_pts (mpeg2dec->decoder, mpeg_pts); -#endif - } else { - GST_LOG ("no pts"); - } - GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer"); - mpeg2_buffer (mpeg2dec->decoder, map.data, map.data + map.size); + mpeg2_buffer (mpeg2dec->decoder, minfo.data, minfo.data + minfo.size); GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer done"); while (!done) { @@ -1100,19 +985,11 @@ gst_mpeg2dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) * could be done. */ if (ret == GST_FLOW_ERROR) { - mpeg2dec->error_count++; - GST_WARNING_OBJECT (mpeg2dec, "Decoding error #%d", - mpeg2dec->error_count); - if (mpeg2dec->error_count >= WARN_THRESHOLD && WARN_THRESHOLD > 0) { - GST_ELEMENT_WARNING (mpeg2dec, STREAM, DECODE, - ("%d consecutive decoding errors", mpeg2dec->error_count), - (NULL)); - } - mpeg2_reset (mpeg2dec->decoder, 0); - mpeg2_skip (mpeg2dec->decoder, 1); - mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE; - - goto exit; + GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE, + ("decoding error"), ("Bad sequence header"), ret); + gst_video_decoder_drop_frame (decoder, frame); + gst_mpeg2dec_reset (decoder, 0); + goto done; } break; case STATE_SEQUENCE_REPEATED: @@ -1122,7 +999,7 @@ gst_mpeg2dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) GST_DEBUG_OBJECT (mpeg2dec, "gop"); break; case STATE_PICTURE: - ret = handle_picture (mpeg2dec, info); + ret = handle_picture (mpeg2dec, info, frame); break; case STATE_SLICE_1ST: GST_LOG_OBJECT (mpeg2dec, "1st slice of frame encountered"); @@ -1137,46 +1014,35 @@ gst_mpeg2dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) #endif case STATE_END: GST_DEBUG_OBJECT (mpeg2dec, "end"); - mpeg2dec->need_sequence = TRUE; case STATE_SLICE: - ret = handle_slice (mpeg2dec, info); + GST_DEBUG_OBJECT (mpeg2dec, "display_fbuf:%p, discard_fbuf:%p", + info->display_fbuf, info->discard_fbuf); + if (info->display_fbuf && info->display_fbuf->id) { + ret = handle_slice (mpeg2dec, info); + } else { + GST_DEBUG_OBJECT (mpeg2dec, "no picture to display"); + } + if (info->discard_fbuf && info->discard_fbuf->id) + gst_mpeg2dec_discard_buffer (mpeg2dec, + GPOINTER_TO_INT (info->discard_fbuf->id) - 1); + if (state != STATE_SLICE) { + gst_mpeg2dec_clear_buffers (mpeg2dec); + } break; case STATE_BUFFER: done = TRUE; break; /* error */ case STATE_INVALID: - /* FIXME: at some point we should probably send newsegment events to - * let downstream know that parts of the stream are missing */ - mpeg2dec->error_count++; - GST_WARNING_OBJECT (mpeg2dec, "Decoding error #%d", - mpeg2dec->error_count); - if (mpeg2dec->error_count >= WARN_THRESHOLD && WARN_THRESHOLD > 0) { - GST_ELEMENT_WARNING (mpeg2dec, STREAM, DECODE, - ("%d consecutive decoding errors", mpeg2dec->error_count), - (NULL)); - } + GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE, + ("decoding error"), ("Reached libmpeg2 invalid state"), ret); continue; default: GST_ERROR_OBJECT (mpeg2dec, "Unknown libmpeg2 state %d, FIXME", state); - goto exit; - } - - mpeg2dec->error_count = 0; - - /* - * FIXME: should pass more information such as state the user data is from - */ -#ifdef enable_user_data - if (info->user_data_len > 0) { - GstBuffer *udbuf = - gst_buffer_new_allocate (NULL, info->user_data_len, NULL); - - gst_buffer_fill (udbuf, 0, info->user_data, info->user_data_len); - - gst_pad_push (mpeg2dec->userdatapad, udbuf); + ret = GST_FLOW_OK; + gst_video_codec_frame_unref (frame); + goto done; } -#endif if (ret != GST_FLOW_OK) { GST_DEBUG_OBJECT (mpeg2dec, "exit loop, reason %s", @@ -1184,218 +1050,12 @@ gst_mpeg2dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) break; } } -done: - gst_buffer_unmap (buf, &map); - gst_buffer_unref (buf); - return ret; - - /* errors */ -exit: - { - ret = GST_FLOW_OK; - goto done; - } -} - -static gboolean -gst_mpeg2dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) -{ - GstMpeg2dec *mpeg2dec; - gboolean ret = TRUE; - - mpeg2dec = GST_MPEG2DEC (parent); - - GST_DEBUG_OBJECT (mpeg2dec, "Got %s event on sink pad", - GST_EVENT_TYPE_NAME (event)); - - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_CAPS: - { - GstCaps *caps; - - gst_event_parse_caps (event, &caps); - ret = gst_mpeg2dec_setcaps (pad, caps); - gst_event_unref (event); - break; - } - case GST_EVENT_SEGMENT: - { - GstSegment seg; - - gst_event_copy_segment (event, &seg); - - /* we need TIME */ - if (seg.format != GST_FORMAT_TIME) - goto newseg_wrong_format; - /* now configure the values */ - mpeg2dec->segment = seg; - - GST_DEBUG_OBJECT (mpeg2dec, "Pushing seg %" GST_SEGMENT_FORMAT, &seg); - - ret = gst_pad_push_event (mpeg2dec->srcpad, event); - break; - } - case GST_EVENT_FLUSH_START: - ret = gst_pad_push_event (mpeg2dec->srcpad, event); - break; - case GST_EVENT_FLUSH_STOP: - { - mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE; - mpeg2dec->next_time = -1;; - gst_mpeg2dec_qos_reset (mpeg2dec); - mpeg2_reset (mpeg2dec->decoder, 0); - mpeg2_skip (mpeg2dec->decoder, 1); - clear_queued (mpeg2dec); - ret = gst_pad_push_event (mpeg2dec->srcpad, event); - break; - } - case GST_EVENT_EOS: - ret = gst_pad_push_event (mpeg2dec->srcpad, event); - break; - default: - ret = gst_pad_push_event (mpeg2dec->srcpad, event); - break; - } + gst_video_codec_frame_unref (frame); done: - + gst_buffer_unmap (buf, &minfo); return ret; - - /* ERRORS */ -newseg_wrong_format: - { - GST_DEBUG_OBJECT (mpeg2dec, "received non TIME newsegment"); - gst_event_unref (event); - goto done; - } -} - -static gboolean -gst_mpeg2dec_setcaps (GstPad * pad, GstCaps * caps) -{ - GstMpeg2dec *mpeg2dec; - GstStructure *s; - - mpeg2dec = GST_MPEG2DEC (gst_pad_get_parent (pad)); - - s = gst_caps_get_structure (caps, 0); - - /* parse the par, this overrides the encoded par */ - mpeg2dec->have_par = gst_structure_get_fraction (s, "pixel-aspect-ratio", - &mpeg2dec->in_par_n, &mpeg2dec->in_par_d); - - gst_object_unref (mpeg2dec); - - return TRUE; -} - -static gboolean -gst_mpeg2dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event) -{ - gboolean res; - GstMpeg2dec *mpeg2dec; - - mpeg2dec = GST_MPEG2DEC (parent); - - if (mpeg2dec->decoder == NULL) - goto no_decoder; - - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_QOS: - { - GstQOSType type; - gdouble proportion; - GstClockTimeDiff diff; - GstClockTime timestamp; - - gst_event_parse_qos (event, &type, &proportion, &diff, ×tamp); - - GST_OBJECT_LOCK (mpeg2dec); - mpeg2dec->proportion = proportion; - mpeg2dec->earliest_time = timestamp + diff; - GST_OBJECT_UNLOCK (mpeg2dec); - - GST_DEBUG_OBJECT (mpeg2dec, - "got QoS %" GST_TIME_FORMAT ", %" G_GINT64_FORMAT, - GST_TIME_ARGS (timestamp), diff); - - res = gst_pad_push_event (mpeg2dec->sinkpad, event); - break; - } - case GST_EVENT_SEEK: - case GST_EVENT_NAVIGATION: - /* Forward unchanged */ - default: - res = gst_pad_push_event (mpeg2dec->sinkpad, event); - break; - } - return res; - -no_decoder: - { - GST_DEBUG_OBJECT (mpeg2dec, "no decoder, cannot handle event"); - gst_event_unref (event); - return FALSE; - } -} - -static GstStateChangeReturn -gst_mpeg2dec_change_state (GstElement * element, GstStateChange transition) -{ - GstStateChangeReturn ret; - GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (element); - - switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: - mpeg2_accel (MPEG2_ACCEL_DETECT); - if ((mpeg2dec->decoder = mpeg2_init ()) == NULL) - goto init_failed; - mpeg2dec->info = mpeg2_info (mpeg2dec->decoder); - break; - case GST_STATE_CHANGE_READY_TO_PAUSED: - gst_mpeg2dec_reset (mpeg2dec); - gst_mpeg2dec_qos_reset (mpeg2dec); - break; - case GST_STATE_CHANGE_PAUSED_TO_PLAYING: - default: - break; - } - - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - - switch (transition) { - case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - break; - case GST_STATE_CHANGE_PAUSED_TO_READY: - gst_mpeg2dec_qos_reset (mpeg2dec); - clear_queued (mpeg2dec); - if (mpeg2dec->pool) { - gst_buffer_pool_set_active (mpeg2dec->pool, FALSE); - gst_object_unref (mpeg2dec->pool); - mpeg2dec->pool = NULL; - } - break; - case GST_STATE_CHANGE_READY_TO_NULL: - if (mpeg2dec->decoder) { - mpeg2_close (mpeg2dec->decoder); - mpeg2dec->decoder = NULL; - mpeg2dec->info = NULL; - } - clear_buffers (mpeg2dec); - break; - default: - break; - } - return ret; - - /* ERRORS */ -init_failed: - { - GST_ELEMENT_ERROR (mpeg2dec, LIBRARY, INIT, - (NULL), ("Failed to initialize libmpeg2 library")); - return GST_STATE_CHANGE_FAILURE; - } } static gboolean diff --git a/ext/mpeg2dec/gstmpeg2dec.h b/ext/mpeg2dec/gstmpeg2dec.h index eaf6fa4..459ede5 100644 --- a/ext/mpeg2dec/gstmpeg2dec.h +++ b/ext/mpeg2dec/gstmpeg2dec.h @@ -24,8 +24,7 @@ #include <gst/gst.h> #include <gst/video/video.h> -#include <gst/video/gstvideopool.h> -#include <gst/video/gstvideometa.h> +#include <gst/video/gstvideodecoder.h> #include <mpeg2.h> G_BEGIN_DECLS @@ -55,12 +54,7 @@ typedef enum } DiscontState; struct _GstMpeg2dec { - GstElement element; - - /* pads */ - GstPad *sinkpad, - *srcpad, - *userdatapad; + GstVideoDecoder element; mpeg2dec_t *decoder; const mpeg2_info_t *info; @@ -68,56 +62,26 @@ struct _GstMpeg2dec { gboolean closed; gboolean have_fbuf; - /* buffer management */ - guint ip_framepos; - GstVideoFrame ip_frame[4]; - GstVideoFrame b_frame; + /* Buffer lifetime management */ + GList *buffers; + /* FIXME This should not be necessary. It is used to prevent image + * corruption when the parser does not behave the way it should. + * See https://bugzilla.gnome.org/show_bug.cgi?id=674238 + */ DiscontState discont_state; - /* the timestamp of the next frame */ - GstClockTime next_time; - GstSegment segment; - - /* whether we have a pixel aspect ratio from the sink caps */ - gboolean have_par; - gint in_par_n; - gint in_par_d; - /* video state */ - GstVideoInfo vinfo; - GstVideoInfo cinfo; + GstVideoCodecState *input_state; + GstVideoInfo decoded_info; gboolean need_cropping; gboolean has_cropping; - gint64 frame_period; - gboolean interlaced; - GstBufferPool *pool; - gint size; - gint u_offs; - gint v_offs; guint8 *dummybuf[4]; - - guint64 offset; - gboolean need_sequence; - - gint error_count; - gboolean can_allocate_aligned; - - /* QoS stuff */ /* with LOCK*/ - gdouble proportion; - GstClockTime earliest_time; - guint64 processed; - guint64 dropped; - - /* gather/decode queues for reverse playback */ - GList *gather; - GList *decode; - GList *queued; }; struct _GstMpeg2decClass { - GstElementClass parent_class; + GstVideoDecoderClass parent_class; }; GType gst_mpeg2dec_get_type(void); diff --git a/ext/sidplay/Makefile.in b/ext/sidplay/Makefile.in index 95f21de..5c56685 100644 --- a/ext/sidplay/Makefile.in +++ b/ext/sidplay/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, @@ -235,7 +235,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/sidplay/gstsiddec.cc b/ext/sidplay/gstsiddec.cc index 17b611b..667f209 100644 --- a/ext/sidplay/gstsiddec.cc +++ b/ext/sidplay/gstsiddec.cc @@ -128,13 +128,17 @@ gst_sid_memory_get_type (void) static void gst_siddec_finalize (GObject * object); -static GstFlowReturn gst_siddec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer); -static gboolean gst_siddec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event); +static GstFlowReturn gst_siddec_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); +static gboolean gst_siddec_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); static gboolean gst_siddec_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value, GstFormat * dest_format, gint64 * dest_value); -static gboolean gst_siddec_src_event (GstPad * pad, GstObject * parent, GstEvent * event); -static gboolean gst_siddec_src_query (GstPad * pad, GstObject * parent, GstQuery * query); +static gboolean gst_siddec_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_siddec_src_query (GstPad * pad, GstObject * parent, + GstQuery * query); static void gst_siddec_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); @@ -160,37 +164,37 @@ gst_siddec_class_init (GstSidDecClass * klass) g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TUNE, g_param_spec_int ("tune", "tune", "tune", 0, 100, DEFAULT_TUNE, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CLOCK, g_param_spec_enum ("clock", "clock", "clock", GST_TYPE_SID_CLOCK, DEFAULT_CLOCK, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEMORY, g_param_spec_enum ("memory", "memory", "memory", GST_TYPE_SID_MEMORY, DEFAULT_MEMORY, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTER, g_param_spec_boolean ("filter", "filter", "filter", DEFAULT_FILTER, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEASURED_VOLUME, g_param_spec_boolean ("measured-volume", "measured_volume", "measured_volume", DEFAULT_MEASURED_VOLUME, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MOS8580, g_param_spec_boolean ("mos8580", "mos8580", "mos8580", DEFAULT_MOS8580, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FORCE_SPEED, g_param_spec_boolean ("force-speed", "force_speed", "force_speed", DEFAULT_FORCE_SPEED, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BLOCKSIZE, g_param_spec_uint ("blocksize", "Block size", "Size in bytes to output per buffer", 1, G_MAXUINT, DEFAULT_BLOCKSIZE, - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_METADATA, g_param_spec_boxed ("metadata", "Metadata", "Metadata", GST_TYPE_CAPS, - (GParamFlags)(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); gst_element_class_set_static_metadata (gstelement_class, "Sid decoder", "Codec/Decoder/Audio", "Use libsidplay to decode SID audio tunes", @@ -272,7 +276,7 @@ update_tags (GstSidDec * siddec) gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_COPYRIGHT, info.copyrightString, (void *) NULL); } - gst_pad_push_event (siddec->srcpad, gst_event_new_tag ("GstDecoder", list)); + gst_pad_push_event (siddec->srcpad, gst_event_new_tag (list)); } } @@ -286,6 +290,7 @@ siddec_negotiate (GstSidDec * siddec) GstCaps *caps; const gchar *str; GstAudioFormat format; + gchar *stream_id; allowed = gst_pad_get_allowed_caps (siddec->srcpad); if (!allowed) @@ -328,6 +333,10 @@ siddec_negotiate (GstSidDec * siddec) gst_structure_get_int (structure, "channels", &channels); siddec->config->channels = channels; + stream_id = gst_pad_create_stream_id (siddec->srcpad, GST_ELEMENT_CAST (siddec), NULL); + gst_pad_push_event (siddec->srcpad, gst_event_new_stream_start (stream_id)); + g_free (stream_id); + caps = gst_caps_new_simple ("audio/x-raw", "format", G_TYPE_STRING, gst_audio_format_to_string (format), "layout", G_TYPE_STRING, "interleaved", @@ -417,7 +426,7 @@ pause: if (ret == GST_FLOW_EOS) { /* perform EOS logic, FIXME, segment seek? */ gst_pad_push_event (pad, gst_event_new_eos ()); - } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) { + } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) { /* for fatal errors we post an error message */ GST_ELEMENT_ERROR (siddec, STREAM, FAILED, (NULL), ("streaming task paused, reason %s", reason)); @@ -449,11 +458,10 @@ start_play_tune (GstSidDec * siddec) goto could_not_init; gst_segment_init (&segment, GST_FORMAT_TIME); - gst_pad_push_event (siddec->srcpad, - gst_event_new_segment (&segment)); + gst_pad_push_event (siddec->srcpad, gst_event_new_segment (&segment)); res = gst_pad_start_task (siddec->srcpad, - (GstTaskFunction) play_loop, siddec->srcpad); + (GstTaskFunction) play_loop, siddec->srcpad, NULL); return res; /* ERRORS */ diff --git a/ext/twolame/Makefile.in b/ext/twolame/Makefile.in index 2f8693c..0a81e0c 100644 --- a/ext/twolame/Makefile.in +++ b/ext/twolame/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, @@ -234,7 +234,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/x264/Makefile.in b/ext/x264/Makefile.in index 087803f..25d33f8 100644 --- a/ext/x264/Makefile.in +++ b/ext/x264/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, @@ -236,7 +236,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/x264/gstx264enc.c b/ext/x264/gstx264enc.c index 1708d42..cb4fb8f 100644 --- a/ext/x264/gstx264enc.c +++ b/ext/x264/gstx264enc.c @@ -98,6 +98,8 @@ #include <gst/pbutils/pbutils.h> #include <gst/video/video.h> +#include <gst/video/gstvideometa.h> +#include <gst/video/gstvideopool.h> #include <string.h> #include <stdlib.h> @@ -402,33 +404,32 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_STATIC_CAPS ("video/x-h264, " "framerate = (fraction) [0/1, MAX], " "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ], " - "stream-format = (string) { byte-stream, avc }, " + "stream-format = (string) { avc, byte-stream }, " "alignment = (string) { au }, " "profile = (string) { high-10, high, main, baseline, " "constrained-baseline, high-10-intra }") ); static void gst_x264_enc_finalize (GObject * object); -static void gst_x264_enc_reset (GstX264Enc * encoder); +static gboolean gst_x264_enc_reset (GstVideoEncoder * encoder, gboolean hard); static gboolean gst_x264_enc_init_encoder (GstX264Enc * encoder); static void gst_x264_enc_close_encoder (GstX264Enc * encoder); -static gboolean gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps); -static GstCaps *gst_x264_enc_sink_get_caps (GstPad * pad, GstCaps * filter); -static gboolean gst_x264_enc_sink_event (GstPad * pad, GstObject * parent, +static GstFlowReturn gst_x264_enc_finish (GstVideoEncoder * encoder); +static gboolean gst_x264_enc_sink_event (GstVideoEncoder * encoder, GstEvent * event); -static gboolean gst_x264_enc_sink_query (GstPad * pad, GstObject * parent, - GstQuery * query); -static gboolean gst_x264_enc_src_event (GstPad * pad, GstObject * parent, - GstEvent * event); -static GstFlowReturn gst_x264_enc_chain (GstPad * pad, GstObject * parent, - GstBuffer * buf); +static GstFlowReturn gst_x264_enc_handle_frame (GstVideoEncoder * encoder, + GstVideoCodecFrame * frame); static void gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send); static GstFlowReturn gst_x264_enc_encode_frame (GstX264Enc * encoder, - x264_picture_t * pic_in, int *i_nal, gboolean send); -static GstStateChangeReturn gst_x264_enc_change_state (GstElement * element, - GstStateChange transition); + x264_picture_t * pic_in, GstVideoCodecFrame * input_frame, int *i_nal, + gboolean send); +static gboolean gst_x264_enc_stop (GstVideoEncoder * encoder); +static gboolean gst_x264_enc_set_format (GstVideoEncoder * video_enc, + GstVideoCodecState * state); +static gboolean gst_x264_enc_propose_allocation (GstVideoEncoder * encoder, + GstQuery * query); static void gst_x264_enc_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); @@ -436,7 +437,7 @@ static void gst_x264_enc_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); #define gst_x264_enc_parent_class parent_class -G_DEFINE_TYPE_WITH_CODE (GstX264Enc, gst_x264_enc, GST_TYPE_ELEMENT, +G_DEFINE_TYPE_WITH_CODE (GstX264Enc, gst_x264_enc, GST_TYPE_VIDEO_ENCODER, G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL)); /* don't forget to free the string after use */ @@ -467,19 +468,30 @@ static void gst_x264_enc_class_init (GstX264EncClass * klass) { GObjectClass *gobject_class; - GstElementClass *gstelement_class; - + GstElementClass *element_class; + GstVideoEncoderClass *gstencoder_class; const gchar *partitions = NULL; x264enc_defaults = g_string_new (""); - gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; + gobject_class = G_OBJECT_CLASS (klass); + element_class = GST_ELEMENT_CLASS (klass); + gstencoder_class = GST_VIDEO_ENCODER_CLASS (klass); gobject_class->set_property = gst_x264_enc_set_property; gobject_class->get_property = gst_x264_enc_get_property; gobject_class->finalize = gst_x264_enc_finalize; + gstencoder_class->stop = GST_DEBUG_FUNCPTR (gst_x264_enc_stop); + gstencoder_class->set_format = GST_DEBUG_FUNCPTR (gst_x264_enc_set_format); + gstencoder_class->handle_frame = + GST_DEBUG_FUNCPTR (gst_x264_enc_handle_frame); + gstencoder_class->reset = GST_DEBUG_FUNCPTR (gst_x264_enc_reset); + gstencoder_class->finish = GST_DEBUG_FUNCPTR (gst_x264_enc_finish); + gstencoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_event); + gstencoder_class->propose_allocation = + GST_DEBUG_FUNCPTR (gst_x264_enc_propose_allocation); + /* options for which we don't use string equivalents */ g_object_class_install_property (gobject_class, ARG_PASS, g_param_spec_enum ("pass", "Encoding pass/type", @@ -706,18 +718,17 @@ gst_x264_enc_class_init (GstX264EncClass * klass) /* append weighted prediction parameter */ g_string_append_printf (x264enc_defaults, ":weightp=0"); - gst_element_class_set_static_metadata (gstelement_class, + gst_element_class_set_static_metadata (element_class, "x264enc", "Codec/Encoder/Video", "H264 Encoder", "Josef Zlomek <josef.zlomek@itonis.tv>, " "Mark Nauwelaerts <mnauw@users.sf.net>"); - gst_element_class_add_pad_template (gstelement_class, + gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_add_pad_template (gstelement_class, + gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gstelement_class->change_state = - GST_DEBUG_FUNCPTR (gst_x264_enc_change_state); + } static void @@ -760,22 +771,6 @@ gst_x264_enc_log_callback (gpointer private, gint level, const char *format, static void gst_x264_enc_init (GstX264Enc * encoder) { - encoder->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); - gst_pad_set_event_function (encoder->sinkpad, - GST_DEBUG_FUNCPTR (gst_x264_enc_sink_event)); - gst_pad_set_chain_function (encoder->sinkpad, - GST_DEBUG_FUNCPTR (gst_x264_enc_chain)); - gst_pad_set_query_function (encoder->sinkpad, - GST_DEBUG_FUNCPTR (gst_x264_enc_sink_query)); - gst_element_add_pad (GST_ELEMENT (encoder), encoder->sinkpad); - - encoder->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); - gst_pad_use_fixed_caps (encoder->srcpad); - gst_element_add_pad (GST_ELEMENT (encoder), encoder->srcpad); - - gst_pad_set_event_function (encoder->srcpad, - GST_DEBUG_FUNCPTR (gst_x264_enc_src_event)); - /* properties */ encoder->threads = ARG_THREADS_DEFAULT; encoder->sliced_threads = ARG_SLICED_THREADS_DEFAULT; @@ -816,11 +811,6 @@ gst_x264_enc_init (GstX264Enc * encoder) encoder->psy_tune = ARG_PSY_TUNE_DEFAULT; encoder->tune = ARG_TUNE_DEFAULT; - /* resources */ - encoder->delay = g_queue_new (); - encoder->buffer_size = 100000; - encoder->buffer = g_malloc (encoder->buffer_size); - x264_param_default (&encoder->x264param); /* log callback setup; part of parameters */ @@ -828,23 +818,88 @@ gst_x264_enc_init (GstX264Enc * encoder) encoder->x264param.p_log_private = encoder; encoder->x264param.i_log_level = X264_LOG_DEBUG; - gst_segment_init (&encoder->segment, GST_FORMAT_TIME); - encoder->force_key_unit_event = NULL; - gst_x264_enc_reset (encoder); + gst_x264_enc_reset (GST_VIDEO_ENCODER (encoder), FALSE); +} + +typedef struct +{ + GstVideoCodecFrame *frame; + GstVideoFrame vframe; +} FrameData; + +static FrameData * +gst_x264_enc_queue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame, + GstVideoInfo * info) +{ + GstVideoFrame vframe; + FrameData *fdata; + + if (!gst_video_frame_map (&vframe, info, frame->input_buffer, GST_MAP_READ)) + return NULL; + + fdata = g_slice_new (FrameData); + fdata->frame = gst_video_codec_frame_ref (frame); + fdata->vframe = vframe; + + enc->pending_frames = g_list_prepend (enc->pending_frames, fdata); + + return fdata; } static void -gst_x264_enc_reset (GstX264Enc * encoder) +gst_x264_enc_dequeue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame) { - encoder->x264enc = NULL; - gst_video_info_init (&encoder->info); - encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY; - gst_segment_init (&encoder->segment, GST_FORMAT_UNDEFINED); + GList *l; - GST_OBJECT_LOCK (encoder); - gst_event_replace (&encoder->force_key_unit_event, NULL); - encoder->pending_key_unit_ts = GST_CLOCK_TIME_NONE; - GST_OBJECT_UNLOCK (encoder); + for (l = enc->pending_frames; l; l = l->next) { + FrameData *fdata = l->data; + + if (fdata->frame != frame) + continue; + + gst_video_frame_unmap (&fdata->vframe); + gst_video_codec_frame_unref (fdata->frame); + g_slice_free (FrameData, fdata); + + enc->pending_frames = g_list_delete_link (enc->pending_frames, l); + return; + } +} + +static void +gst_x264_enc_dequeue_all_frames (GstX264Enc * enc) +{ + GList *l; + + for (l = enc->pending_frames; l; l = l->next) { + FrameData *fdata = l->data; + + gst_video_frame_unmap (&fdata->vframe); + gst_video_codec_frame_unref (fdata->frame); + g_slice_free (FrameData, fdata); + } + g_list_free (enc->pending_frames); + enc->pending_frames = NULL; +} + +static gboolean +gst_x264_enc_reset (GstVideoEncoder * encoder, gboolean hard) +{ + GstX264Enc *x264enc = GST_X264_ENC (encoder); + + if (hard) { + gst_x264_enc_flush_frames (x264enc, FALSE); + gst_x264_enc_close_encoder (x264enc); + } + + if (x264enc->input_state) + gst_video_codec_state_unref (x264enc->input_state); + x264enc->input_state = NULL; + x264enc->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY; + + gst_x264_enc_dequeue_all_frames (x264enc); + + return TRUE; } static void @@ -852,6 +907,10 @@ gst_x264_enc_finalize (GObject * object) { GstX264Enc *encoder = GST_X264_ENC (object); + if (encoder->input_state) + gst_video_codec_state_unref (encoder->input_state); + encoder->input_state = NULL; + #define FREE_STRING(ptr) \ if (ptr) \ g_string_free (ptr, TRUE); @@ -864,10 +923,6 @@ gst_x264_enc_finalize (GObject * object) g_free (encoder->mp_cache_file); encoder->mp_cache_file = NULL; - g_free (encoder->buffer); - encoder->buffer = NULL; - g_queue_free (encoder->delay); - encoder->delay = NULL; gst_x264_enc_close_encoder (encoder); @@ -933,7 +988,7 @@ static gboolean gst_x264_enc_init_encoder (GstX264Enc * encoder) { guint pass = 0; - gint width, height, fps_n, fps_d; + GstVideoInfo *info = &encoder->input_state->info; /* make sure that the encoder is closed */ gst_x264_enc_close_encoder (encoder); @@ -999,36 +1054,29 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder) } } - width = GST_VIDEO_INFO_WIDTH (&encoder->info); - height = GST_VIDEO_INFO_HEIGHT (&encoder->info); - fps_n = GST_VIDEO_INFO_FPS_N (&encoder->info); - fps_d = GST_VIDEO_INFO_FPS_D (&encoder->info); /* set up encoder parameters */ - - - encoder->x264param.i_fps_num = fps_n; - encoder->x264param.i_fps_den = fps_d; - encoder->x264param.i_width = width; - encoder->x264param.i_height = height; - if (GST_VIDEO_INFO_PAR_D (&encoder->info) > 0) { - encoder->x264param.vui.i_sar_width = GST_VIDEO_INFO_PAR_N (&encoder->info); - encoder->x264param.vui.i_sar_height = GST_VIDEO_INFO_PAR_D (&encoder->info); + encoder->x264param.i_fps_num = info->fps_n; + encoder->x264param.i_fps_den = info->fps_d; + encoder->x264param.i_width = info->width; + encoder->x264param.i_height = info->height; + if (info->par_d > 0) { + encoder->x264param.vui.i_sar_width = info->par_n; + encoder->x264param.vui.i_sar_height = info->par_d; } - /* FIXME 0.11 : 2s default keyframe interval seems excessive - * (10s is x264 default) */ + encoder->x264param.i_keyint_max = encoder->keyint_max ? encoder->keyint_max : - (2 * fps_n / fps_d); + (10 * info->fps_n / info->fps_d); - if ((((height == 576) && ((width == 720) - || (width == 704) || (width == 352))) - || ((height == 288) && (width == 352))) - && (fps_d == 1) && (fps_n == 25)) { + if ((((info->height == 576) && ((info->width == 720) + || (info->width == 704) || (info->width == 352))) + || ((info->height == 288) && (info->width == 352))) + && (info->fps_d == 1) && (info->fps_n == 25)) { encoder->x264param.vui.i_vidformat = 1; /* PAL */ - } else if ((((height == 480) && ((width == 720) - || (width == 704) || (width == 352))) - || ((height == 240) && (width == 352))) - && (fps_d == 1001) && ((fps_n == 30000) - || (fps_n == 24000))) { + } else if ((((info->height == 480) && ((info->width == 720) + || (info->width == 704) || (info->width == 352))) + || ((info->height == 240) && (info->width == 352))) + && (info->fps_d == 1001) && ((info->fps_n == 30000) + || (info->fps_n == 24000))) { encoder->x264param.vui.i_vidformat = 2; /* NTSC */ } else encoder->x264param.vui.i_vidformat = 5; /* unspecified */ @@ -1072,6 +1120,14 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder) encoder->x264param.rc.b_stat_read = 0; encoder->x264param.rc.b_stat_write = 1; x264_param_apply_fastfirstpass (&encoder->x264param); + encoder->x264param.i_frame_reference = 1; + encoder->x264param.analyse.b_transform_8x8 = 0; + encoder->x264param.analyse.inter = 0; + encoder->x264param.analyse.i_me_method = X264_ME_DIA; + encoder->x264param.analyse.i_subpel_refine = + MIN (2, encoder->x264param.analyse.i_subpel_refine); + encoder->x264param.analyse.i_trellis = 0; + encoder->x264param.analyse.b_fast_pskip = 1; break; case 2: encoder->x264param.rc.b_stat_read = 1; @@ -1083,22 +1139,6 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder) break; } - /* When vfr is disabled, libx264 ignores buffer timestamps. This causes - * issues with rate control in libx264 with our nanosecond timebase. This - * has been fixed upstream in libx264 but this workaround is required for - * pre-fix versions. */ - if (!encoder->x264param.b_vfr_input) { - if (encoder->x264param.i_fps_num == 0) { - GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, - ("Constant framerate is required."), - ("The framerate caps (%d/%d) indicate VFR but VFR is disabled in libx264. (Is the zerolatency tuning in use?)", - encoder->x264param.i_fps_num, encoder->x264param.i_fps_den)); - return FALSE; - } - encoder->x264param.i_timebase_num = encoder->x264param.i_fps_den; - encoder->x264param.i_timebase_den = encoder->x264param.i_fps_num; - } - if (encoder->peer_profile) { if (x264_param_apply_profile (&encoder->x264param, encoder->peer_profile)) GST_WARNING_OBJECT (encoder, "Bad downstream profile name: %s", @@ -1126,7 +1166,9 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder) if (encoder->peer_level->frame_only) { encoder->x264param.b_interlaced = FALSE; +#if X264_BUILD >= 95 encoder->x264param.b_fake_interlaced = FALSE; +#endif } } @@ -1183,8 +1225,6 @@ gst_x264_enc_set_profile_and_level (GstX264Enc * encoder, GstCaps * caps) if (i_nal == 3 && nal[sps_ni].i_type != 7) sps_ni = 1; - /* old style API: nal's are not encapsulated, and have no sync/size prefix, - * new style API: nal's are encapsulated, and have 4-byte size prefix */ sps = nal[sps_ni].p_payload + 4; /* skip NAL unit type */ sps++; @@ -1246,8 +1286,6 @@ gst_x264_enc_header_buf (GstX264Enc * encoder) buffer_size = (nal[sps_ni].i_payload + nal[pps_ni].i_payload) * 4 + 100; buffer = g_malloc (buffer_size); - /* old style API: nal's are not encapsulated, and have no sync/size prefix, - * new style API: nal's are encapsulated, and have 4-byte size prefix */ sps = nal[sps_ni].p_payload + 4; /* skip NAL unit type */ sps++; @@ -1264,6 +1302,7 @@ gst_x264_enc_header_buf (GstX264Enc * encoder) nal_size = nal[sps_ni].i_payload - 4; memcpy (buffer + i_size + 2, nal[sps_ni].p_payload + 4, nal_size); + GST_WRITE_UINT16_BE (buffer + i_size, nal_size); i_size += nal_size + 2; @@ -1271,6 +1310,7 @@ gst_x264_enc_header_buf (GstX264Enc * encoder) nal_size = nal[pps_ni].i_payload - 4; memcpy (buffer + i_size + 2, nal[pps_ni].p_payload + 4, nal_size); + GST_WRITE_UINT16_BE (buffer + i_size, nal_size); i_size += nal_size + 2; @@ -1287,22 +1327,13 @@ gst_x264_enc_header_buf (GstX264Enc * encoder) * Returns: TRUE on success. */ static gboolean -gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstPad * pad, GstCaps * caps) +gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstCaps * caps) { - GstBuffer *buf; GstCaps *outcaps; GstStructure *structure; - gboolean res; - - outcaps = gst_caps_new_simple ("video/x-h264", - "width", G_TYPE_INT, GST_VIDEO_INFO_WIDTH (&encoder->info), - "height", G_TYPE_INT, GST_VIDEO_INFO_HEIGHT (&encoder->info), - "framerate", GST_TYPE_FRACTION, GST_VIDEO_INFO_FPS_N (&encoder->info), - GST_VIDEO_INFO_FPS_D (&encoder->info), - "pixel-aspect-ratio", GST_TYPE_FRACTION, - GST_VIDEO_INFO_PAR_N (&encoder->info), - GST_VIDEO_INFO_PAR_D (&encoder->info), NULL); + GstVideoCodecState *state; + outcaps = gst_caps_new_empty_simple ("video/x-h264"); structure = gst_caps_get_structure (outcaps, 0); if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY) { @@ -1313,7 +1344,7 @@ gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstPad * pad, GstCaps * caps) } } if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_AVC) { - buf = gst_x264_enc_header_buf (encoder); + GstBuffer *buf = gst_x264_enc_header_buf (encoder); if (buf != NULL) { gst_caps_set_simple (outcaps, "codec_data", GST_TYPE_BUFFER, buf, NULL); gst_buffer_unref (buf); @@ -1330,45 +1361,59 @@ gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstPad * pad, GstCaps * caps) return FALSE; } - res = gst_pad_set_caps (pad, outcaps); - gst_caps_unref (outcaps); + state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder), + outcaps, encoder->input_state); + GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, state->caps); + gst_video_codec_state_unref (state); + + return TRUE; +} + +static void +gst_x264_enc_set_latency (GstX264Enc * encoder) +{ + GstVideoInfo *info = &encoder->input_state->info; + + if (info->fps_n) { + GstClockTime latency; + gint max_delayed_frames; + max_delayed_frames = x264_encoder_maximum_delayed_frames (encoder->x264enc); + latency = gst_util_uint64_scale_ceil (GST_SECOND * info->fps_d, + max_delayed_frames, info->fps_n); + + GST_INFO ("Updating latency to %" GST_TIME_FORMAT " (%d frames)", + GST_TIME_ARGS (latency), max_delayed_frames); - return res; + gst_video_encoder_set_latency (GST_VIDEO_ENCODER (encoder), latency, + latency); + } else { + /* We can't do live as we don't know our latency */ + gst_video_encoder_set_latency (GST_VIDEO_ENCODER (encoder), + GST_CLOCK_TIME_NONE, GST_CLOCK_TIME_NONE); + } } static gboolean -gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) +gst_x264_enc_set_format (GstVideoEncoder * video_enc, + GstVideoCodecState * state) { - GstX264Enc *encoder = GST_X264_ENC (GST_OBJECT_PARENT (pad)); - GstVideoInfo info; - gint width, height; - gint fps_n, fps_d; - gint par_n, par_d; - GstCaps *peer_caps; + GstX264Enc *encoder = GST_X264_ENC (video_enc); + GstVideoInfo *info = &state->info; GstCaps *allowed_caps = NULL; gboolean level_ok = TRUE; - /* get info from caps */ - if (!gst_video_info_from_caps (&info, caps)) - goto invalid_caps; - - width = GST_VIDEO_INFO_WIDTH (&info); - height = GST_VIDEO_INFO_HEIGHT (&info); - fps_n = GST_VIDEO_INFO_FPS_N (&info); - fps_d = GST_VIDEO_INFO_FPS_D (&info); - par_n = GST_VIDEO_INFO_PAR_N (&info); - par_d = GST_VIDEO_INFO_PAR_D (&info); - /* If the encoder is initialized, do not reinitialize it again if not * necessary */ if (encoder->x264enc) { - if (width == GST_VIDEO_INFO_WIDTH (&encoder->info) && - height == GST_VIDEO_INFO_HEIGHT (&encoder->info) && - fps_n == GST_VIDEO_INFO_FPS_N (&encoder->info) && - fps_d == GST_VIDEO_INFO_FPS_D (&encoder->info) && - par_n == GST_VIDEO_INFO_PAR_N (&encoder->info) && - par_d == GST_VIDEO_INFO_PAR_D (&encoder->info)) + GstVideoInfo *old = &encoder->input_state->info; + + if (info->width == old->width && info->height == old->height + && info->fps_n == old->fps_n && info->fps_d == old->fps_d + && info->par_n == old->par_n && info->par_d == old->par_d) { + gst_video_codec_state_unref (encoder->input_state); + encoder->input_state = gst_video_codec_state_ref (state); return TRUE; + } /* clear out pending frames */ gst_x264_enc_flush_frames (encoder, TRUE); @@ -1376,46 +1421,15 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) encoder->sps_id++; } - /* store input description */ - encoder->info = info; + if (encoder->input_state) + gst_video_codec_state_unref (state); + encoder->input_state = gst_video_codec_state_ref (state); encoder->peer_profile = NULL; encoder->peer_intra_profile = FALSE; encoder->peer_level = NULL; - /* FIXME: Remove THIS bit in 0.11 when the profile property is removed */ - peer_caps = gst_pad_peer_query_caps (encoder->srcpad, NULL); - if (peer_caps) { - gint i; - gboolean has_profile_or_level_or_format = FALSE; - - for (i = 0; i < gst_caps_get_size (peer_caps); i++) { - GstStructure *s = gst_caps_get_structure (peer_caps, i); - - if (gst_structure_has_name (s, "video/x-h264") && - (gst_structure_has_field (s, "profile") || - gst_structure_has_field (s, "level") || - gst_structure_has_field (s, "stream-format"))) { - has_profile_or_level_or_format = TRUE; - break; - } - } - - if (has_profile_or_level_or_format) { - GstCaps *template_caps; - - template_caps = gst_pad_get_pad_template_caps (encoder->srcpad); - - allowed_caps = gst_caps_intersect (peer_caps, template_caps); - gst_caps_unref (template_caps); - } - - gst_caps_unref (peer_caps); - } - - /* Replace the bit since FIXME with this - * allowed_caps = gst_pad_get_allowed_caps (encoder->srcpad); - */ + allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder)); if (allowed_caps) { GstStructure *s; @@ -1428,9 +1442,8 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) return FALSE; } - allowed_caps = gst_caps_fixate (allowed_caps); - allowed_caps = gst_caps_make_writable (allowed_caps); + allowed_caps = gst_caps_fixate (allowed_caps); s = gst_caps_get_structure (allowed_caps, 0); profile = gst_structure_get_string (s, "profile"); @@ -1464,8 +1477,8 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) for (i = 0; x264_levels[i].level_idc; i++) { if (level_idc == x264_levels[i].level_idc) { - int mb_width = (width + 15) / 16; - int mb_height = (height + 15) / 16; + int mb_width = (info->width + 15) / 16; + int mb_height = (info->height + 15) / 16; int mbs = mb_width * mb_height; if (x264_levels[i].frame_size < mbs || @@ -1477,7 +1490,8 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) break; } - if (fps_d && x264_levels[i].mbps < (gint64) mbs * fps_n / fps_d) { + if (info->fps_d && x264_levels[i].mbps + < (gint64) mbs * info->fps_n / info->fps_d) { GST_WARNING_OBJECT (encoder, "Macroblock rate higher than level %s allows", level); level_ok = FALSE; @@ -1514,261 +1528,98 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) if (!gst_x264_enc_init_encoder (encoder)) return FALSE; - if (!gst_x264_enc_set_src_caps (encoder, encoder->srcpad, caps)) { + if (!gst_x264_enc_set_src_caps (encoder, state->caps)) { gst_x264_enc_close_encoder (encoder); return FALSE; } - return TRUE; + gst_x264_enc_set_latency (encoder); - /* ERRORS */ -invalid_caps: - { - GST_ERROR_OBJECT (encoder, "invalid caps"); - return FALSE; - } + return TRUE; } -static GstCaps * -gst_x264_enc_sink_get_caps (GstPad * pad, GstCaps * filter) +static GstFlowReturn +gst_x264_enc_finish (GstVideoEncoder * encoder) { - GstX264Enc *encoder; - GstPad *peer; - GstCaps *caps, *current; - GstCaps *templcaps; - - encoder = GST_X264_ENC (gst_pad_get_parent (pad)); - if (!encoder) - return gst_caps_new_empty (); - - templcaps = gst_pad_get_pad_template_caps (pad); - - peer = gst_pad_get_peer (encoder->srcpad); - if (peer) { - GstCaps *peercaps; - guint i, n; - - peercaps = gst_pad_query_caps (peer, NULL); - - /* Translate peercaps to YUV */ - peercaps = gst_caps_make_writable (peercaps); - n = gst_caps_get_size (peercaps); - for (i = 0; i < n; i++) { - GstStructure *s = gst_caps_get_structure (peercaps, i); - - gst_structure_set_name (s, "video/x-raw"); - gst_structure_remove_field (s, "stream-format"); - gst_structure_remove_field (s, "alignment"); - } - - caps = gst_caps_intersect (peercaps, templcaps); - gst_caps_unref (peercaps); - gst_caps_unref (templcaps); - gst_object_unref (peer); - peer = NULL; - } else { - caps = templcaps; - } - - /* If we already have caps return them */ - current = gst_pad_get_current_caps (pad); - if (current) { - if (gst_caps_can_intersect (current, caps)) { - caps = gst_caps_merge (current, caps); - } else { - gst_caps_unref (current); - } - } - - gst_object_unref (encoder); - - return caps; + gst_x264_enc_flush_frames (GST_X264_ENC (encoder), TRUE); + return GST_FLOW_OK; } static gboolean -gst_x264_enc_src_event (GstPad * pad, GstObject * parent, GstEvent * event) +gst_x264_enc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query) { - gboolean ret = TRUE; - GstX264Enc *encoder; - gboolean forward = TRUE; - - encoder = GST_X264_ENC (parent); + gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_CUSTOM_UPSTREAM:{ - guint count; - gboolean all_headers; - - if (!gst_video_event_is_force_key_unit (event)) - goto out; - - GST_OBJECT_LOCK (encoder); - gst_video_event_parse_upstream_force_key_unit (event, - &encoder->pending_key_unit_ts, &all_headers, &count); - GST_INFO_OBJECT (encoder, "received upstream force-key-unit event, " - "seqnum %d running_time %" GST_TIME_FORMAT " all_headers %d count %d", - gst_event_get_seqnum (event), - GST_TIME_ARGS (encoder->pending_key_unit_ts), all_headers, count); - - gst_event_replace (&encoder->force_key_unit_event, event); - gst_event_unref (event); - GST_OBJECT_UNLOCK (encoder); - forward = FALSE; - break; - } - default: - break; - } - -out: - if (forward) - ret = gst_pad_push_event (encoder->sinkpad, event); - - return ret; + return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder, + query); } static gboolean -gst_x264_enc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) +gst_x264_enc_sink_event (GstVideoEncoder * encoder, GstEvent * event) { - gboolean ret = FALSE, forward = TRUE; - GstX264Enc *encoder; - - encoder = GST_X264_ENC (parent); - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_CAPS: - { - GstCaps *caps; - - gst_event_parse_caps (event, &caps); - ret = gst_x264_enc_sink_set_caps (pad, caps); - forward = FALSE; - break; - } - case GST_EVENT_SEGMENT: - gst_event_copy_segment (event, &encoder->segment); - break; - case GST_EVENT_FLUSH_STOP: - gst_segment_init (&encoder->segment, GST_FORMAT_UNDEFINED); - break; - case GST_EVENT_EOS: - gst_x264_enc_flush_frames (encoder, TRUE); - break; case GST_EVENT_TAG:{ GstTagList *tags = NULL; - event = - GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event))); - gst_event_parse_tag (event, &tags); + tags = gst_tag_list_copy (tags); + + gst_event_take (&event, gst_event_new_tag (tags)); + /* drop codec/video-codec and replace encoder/encoder-version */ gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC); gst_tag_list_remove_tag (tags, GST_TAG_CODEC); gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264", GST_TAG_ENCODER_VERSION, X264_BUILD, NULL); - /* push is done below */ - break; - /* no flushing if flush received, - * buffers in encoder are considered (in the) past */ - } - case GST_EVENT_CUSTOM_DOWNSTREAM:{ - guint count; - gboolean all_headers; - - if (!gst_video_event_is_force_key_unit (event)) - break; - - GST_OBJECT_LOCK (encoder); - - gst_video_event_parse_downstream_force_key_unit (event, NULL, NULL, - &encoder->pending_key_unit_ts, &all_headers, &count); - GST_INFO_OBJECT (encoder, "received downstream force-key-unit event, " - "seqnum %d running_time %" GST_TIME_FORMAT " all_headers %d count %d", - gst_event_get_seqnum (event), - GST_TIME_ARGS (encoder->pending_key_unit_ts), all_headers, count); - - gst_event_replace (&encoder->force_key_unit_event, event); - gst_event_unref (event); - GST_OBJECT_UNLOCK (encoder); break; } default: break; } - if (forward) - ret = gst_pad_push_event (encoder->srcpad, event); - else - gst_event_unref (event); - - return ret; -} - -static gboolean -gst_x264_enc_sink_query (GstPad * pad, GstObject * parent, GstQuery * query) -{ - gboolean ret = FALSE; - - switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_CAPS: - { - GstCaps *filter, *caps; - - gst_query_parse_caps (query, &filter); - caps = gst_x264_enc_sink_get_caps (pad, filter); - gst_query_set_caps_result (query, caps); - gst_caps_unref (caps); - ret = TRUE; - break; - } - default: - ret = gst_pad_query_default (pad, parent, query); - break; - } - - return ret; + return GST_VIDEO_ENCODER_CLASS (parent_class)->sink_event (encoder, event); } /* chain function * this function does the actual processing */ static GstFlowReturn -gst_x264_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) +gst_x264_enc_handle_frame (GstVideoEncoder * video_enc, + GstVideoCodecFrame * frame) { - GstX264Enc *encoder = GST_X264_ENC (parent); + GstX264Enc *encoder = GST_X264_ENC (video_enc); + GstVideoInfo *info = &encoder->input_state->info; GstFlowReturn ret; x264_picture_t pic_in; gint i_nal, i; - GstVideoFrame frame; + FrameData *fdata; if (G_UNLIKELY (encoder->x264enc == NULL)) goto not_inited; /* create x264_picture_t from the buffer */ /* mostly taken from mplayer (file ve_x264.c) */ - if (!gst_video_frame_map (&frame, &encoder->info, buf, GST_MAP_READ)) - goto wrong_video_frame; - - /* remember the timestamp and duration */ - g_queue_push_tail (encoder->delay, buf); /* set up input picture */ memset (&pic_in, 0, sizeof (pic_in)); + fdata = gst_x264_enc_queue_frame (encoder, frame, info); + if (!fdata) + goto invalid_frame; + pic_in.img.i_csp = X264_CSP_I420; pic_in.img.i_plane = 3; for (i = 0; i < 3; i++) { - pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&frame, i); - pic_in.img.i_stride[i] = GST_VIDEO_FRAME_COMP_STRIDE (&frame, i); + pic_in.img.plane[i] = GST_VIDEO_FRAME_PLANE_DATA (&fdata->vframe, i); + pic_in.img.i_stride[i] = GST_VIDEO_FRAME_COMP_STRIDE (&fdata->vframe, i); } pic_in.i_type = X264_TYPE_AUTO; - pic_in.i_dts = GST_BUFFER_DTS (buf); - pic_in.i_pts = GST_BUFFER_PTS (buf); - - ret = gst_x264_enc_encode_frame (encoder, &pic_in, &i_nal, TRUE); + pic_in.i_pts = frame->pts; + pic_in.i_dts = frame->dts; + pic_in.opaque = GINT_TO_POINTER (frame->system_frame_number); - gst_video_frame_unmap (&frame); + ret = gst_x264_enc_encode_frame (encoder, &pic_in, frame, &i_nal, TRUE); /* input buffer is released later on */ return ret; @@ -1777,88 +1628,46 @@ gst_x264_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) not_inited: { GST_WARNING_OBJECT (encoder, "Got buffer before set_caps was called"); - gst_buffer_unref (buf); return GST_FLOW_NOT_NEGOTIATED; } -wrong_video_frame: +invalid_frame: { - GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, - ("Encode x264 frame failed."), ("Could not map video frame")); - gst_buffer_unref (buf); + GST_ERROR_OBJECT (encoder, "Failed to map frame"); return GST_FLOW_ERROR; } } -static GstEvent * -check_pending_key_unit_event (GstEvent * pending_event, GstSegment * segment, - GstClockTime timestamp, GstClockTime pending_key_unit_ts) -{ - GstClockTime running_time, stream_time; - gboolean all_headers; - guint count; - GstEvent *event = NULL; - - g_return_val_if_fail (pending_event != NULL, NULL); - g_return_val_if_fail (segment != NULL, NULL); - - if (pending_event == NULL || timestamp == GST_CLOCK_TIME_NONE) - goto out; - - running_time = gst_segment_to_running_time (segment, - GST_FORMAT_TIME, timestamp); - - GST_INFO ("now %" GST_TIME_FORMAT " wanted %" GST_TIME_FORMAT, - GST_TIME_ARGS (running_time), GST_TIME_ARGS (pending_key_unit_ts)); - - if (running_time < pending_key_unit_ts) - goto out; - - stream_time = gst_segment_to_stream_time (segment, - GST_FORMAT_TIME, timestamp); - - gst_video_event_parse_upstream_force_key_unit (pending_event, - NULL, &all_headers, &count); - - event = - gst_video_event_new_downstream_force_key_unit (timestamp, stream_time, - running_time, all_headers, count); - gst_event_set_seqnum (event, gst_event_get_seqnum (pending_event)); - -out: - return event; -} - static GstFlowReturn gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in, - int *i_nal, gboolean send) + GstVideoCodecFrame * input_frame, int *i_nal, gboolean send) { - GstFlowReturn ret; - GstBuffer *out_buf = NULL, *in_buf = NULL; + GstVideoCodecFrame *frame = NULL; + GstBuffer *out_buf = NULL; x264_picture_t pic_out; x264_nal_t *nal; int i_size; int encoder_return; - GstClockTime duration; + GstFlowReturn ret = GST_FLOW_OK; guint8 *data; - GstEvent *event = NULL; + gboolean update_latency = FALSE; - if (G_UNLIKELY (encoder->x264enc == NULL)) + if (G_UNLIKELY (encoder->x264enc == NULL)) { + if (input_frame) + gst_video_codec_frame_unref (input_frame); return GST_FLOW_NOT_NEGOTIATED; + } GST_OBJECT_LOCK (encoder); if (encoder->reconfig) { encoder->reconfig = FALSE; if (x264_encoder_reconfig (encoder->x264enc, &encoder->x264param) < 0) GST_WARNING_OBJECT (encoder, "Could not reconfigure"); + update_latency = TRUE; } - if (encoder->pending_key_unit_ts != GST_CLOCK_TIME_NONE && pic_in != NULL) { - event = check_pending_key_unit_event (encoder->force_key_unit_event, - &encoder->segment, pic_in->i_pts, encoder->pending_key_unit_ts); - if (event) { - encoder->pending_key_unit_ts = GST_CLOCK_TIME_NONE; - gst_event_replace (&encoder->force_key_unit_event, NULL); - + if (pic_in && input_frame) { + if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (input_frame)) { + GST_INFO ("Forcing key frame"); if (encoder->intra_refresh) x264_encoder_intra_refresh (encoder->x264enc); else @@ -1867,75 +1676,68 @@ gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in, } GST_OBJECT_UNLOCK (encoder); + if (G_UNLIKELY (update_latency)) + gst_x264_enc_set_latency (encoder); + encoder_return = x264_encoder_encode (encoder->x264enc, &nal, i_nal, pic_in, &pic_out); - if (encoder_return < 0) - goto encode_failed; + if (encoder_return < 0) { + GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 frame failed."), + ("x264_encoder_encode return code=%d", encoder_return)); + ret = GST_FLOW_ERROR; + /* Make sure we finish this frame */ + frame = input_frame; + goto out; + } + + /* Input frame is now queued */ + if (input_frame) + gst_video_codec_frame_unref (input_frame); if (!*i_nal) { ret = GST_FLOW_OK; goto out; } + i_size = encoder_return; data = nal[0].p_payload; - in_buf = g_queue_pop_head (encoder->delay); - if (in_buf) { - duration = GST_BUFFER_DURATION (in_buf); - gst_buffer_unref (in_buf); - } else { - GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, (NULL), - ("Timestamp queue empty.")); - ret = GST_FLOW_ERROR; - goto out; - } + frame = gst_video_encoder_get_frame (GST_VIDEO_ENCODER (encoder), + GPOINTER_TO_INT (pic_out.opaque)); + g_assert (frame || !send); - if (!send) { + if (!send || !frame) { ret = GST_FLOW_OK; goto out; } out_buf = gst_buffer_new_allocate (NULL, i_size, NULL); gst_buffer_fill (out_buf, 0, data, i_size); + frame->output_buffer = out_buf; GST_LOG_OBJECT (encoder, "output: dts %" G_GINT64_FORMAT " pts %" G_GINT64_FORMAT, (gint64) pic_out.i_dts, (gint64) pic_out.i_pts); if (pic_out.i_dts < 0) - GST_BUFFER_DTS (out_buf) = GST_CLOCK_TIME_NONE; + frame->dts = GST_CLOCK_TIME_NONE; else - GST_BUFFER_DTS (out_buf) = pic_out.i_dts; - - GST_BUFFER_PTS (out_buf) = pic_out.i_pts; - GST_BUFFER_DURATION (out_buf) = duration; + frame->dts = pic_out.i_dts; + frame->pts = pic_out.i_pts; if (pic_out.b_keyframe) { - GST_BUFFER_FLAG_UNSET (out_buf, GST_BUFFER_FLAG_DELTA_UNIT); - } else { - GST_BUFFER_FLAG_SET (out_buf, GST_BUFFER_FLAG_DELTA_UNIT); + GST_INFO ("Output keyframe"); + GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame); } - if (event) - gst_pad_push_event (encoder->srcpad, gst_event_ref (event)); - - ret = gst_pad_push (encoder->srcpad, out_buf); - out: - if (event) - gst_event_unref (event); + if (frame) { + gst_x264_enc_dequeue_frame (encoder, frame); + gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (encoder), frame); + } return ret; - - /* ERRORS */ -encode_failed: - { - GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 frame failed."), - ("x264_encoder_encode return code=%d", encoder_return)); - ret = GST_FLOW_ERROR; - goto out; - } } static void @@ -1947,41 +1749,17 @@ gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send) /* first send the remaining frames */ if (encoder->x264enc) do { - flow_ret = gst_x264_enc_encode_frame (encoder, NULL, &i_nal, send); + flow_ret = gst_x264_enc_encode_frame (encoder, NULL, NULL, &i_nal, send); } while (flow_ret == GST_FLOW_OK && x264_encoder_delayed_frames (encoder->x264enc) > 0); - - /* in any case, make sure the delay queue is emptied */ - while (!g_queue_is_empty (encoder->delay)) - gst_buffer_unref (g_queue_pop_head (encoder->delay)); } -static GstStateChangeReturn -gst_x264_enc_change_state (GstElement * element, GstStateChange transition) +static gboolean +gst_x264_enc_stop (GstVideoEncoder * encoder) { - GstX264Enc *encoder = GST_X264_ENC (element); - GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; - - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - if (ret == GST_STATE_CHANGE_FAILURE) - goto out; - - switch (transition) { - case GST_STATE_CHANGE_PAUSED_TO_READY: - gst_x264_enc_flush_frames (encoder, FALSE); - gst_x264_enc_close_encoder (encoder); - gst_x264_enc_reset (encoder); - break; - default: - break; - } - -out: - return ret; + return gst_x264_enc_reset (encoder, TRUE); } - - static void gst_x264_enc_reconfig (GstX264Enc * encoder) { diff --git a/ext/x264/gstx264enc.h b/ext/x264/gstx264enc.h index fc32304..0cf2e55 100644 --- a/ext/x264/gstx264enc.h +++ b/ext/x264/gstx264enc.h @@ -23,6 +23,7 @@ #include <gst/gst.h> #include <gst/video/video.h> +#include <gst/video/gstvideoencoder.h> #include "_stdint.h" #include <x264.h> @@ -44,17 +45,17 @@ typedef struct _GstX264EncClass GstX264EncClass; struct _GstX264Enc { - GstElement element; + GstVideoEncoder element; /*< private >*/ - GstPad *sinkpad; - GstPad *srcpad; - GstSegment segment; - x264_t *x264enc; x264_param_t x264param; gint current_byte_stream; + /* List of frame/buffer mapping structs for + * pending frames */ + GList *pending_frames; + /* properties */ guint threads; gboolean sliced_threads; @@ -97,13 +98,7 @@ struct _GstX264Enc GString *option_string; /* used by set prop */ /* input description */ - GstVideoInfo info; - - /* for b-frame delay handling */ - GQueue *delay; - - guint8 *buffer; - gulong buffer_size; + GstVideoCodecState *input_state; /* configuration changed while playing */ gboolean reconfig; @@ -112,14 +107,11 @@ struct _GstX264Enc const gchar *peer_profile; gboolean peer_intra_profile; const x264_level_t *peer_level; - - GstClockTime pending_key_unit_ts; - GstEvent *force_key_unit_event; }; struct _GstX264EncClass { - GstElementClass parent_class; + GstVideoEncoderClass parent_class; }; GType gst_x264_enc_get_type (void); diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in index 321be07..15b2ac0 100644 --- a/gst-libs/Makefile.in +++ b/gst-libs/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, @@ -207,7 +207,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in index 71c7947..6fe846a 100644 --- a/gst-libs/gst/Makefile.in +++ b/gst-libs/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, @@ -172,7 +172,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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-plugins-ugly.doap b/gst-plugins-ugly.doap index c347153..865e796 100644 --- a/gst-plugins-ugly.doap +++ b/gst-plugins-ugly.doap @@ -35,6 +35,16 @@ might be widely known to present patent problems. <release> <Version> + <revision>0.11.93</revision> + <branch>0.11</branch> + <name>Rag Doll Physics</name> + <created>2012-08-08</created> + <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.93.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>0.11.92</revision> <branch>0.11</branch> <name>Hey You</name> diff --git a/gst-plugins-ugly.spec b/gst-plugins-ugly.spec index 6213a8b..6a12bcf 100644 --- a/gst-plugins-ugly.spec +++ b/gst-plugins-ugly.spec @@ -4,7 +4,7 @@ %define gst_minver 0.11.0 Name: %{gstreamer}-plugins-ugly -Version: 0.11.92 +Version: 0.11.93 Release: 1.gst Summary: GStreamer streaming media framework "ugly" plug-ins diff --git a/gst/Makefile.in b/gst/Makefile.in index c33e0d7..297d347 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, @@ -212,7 +212,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/asfdemux/Makefile.in b/gst/asfdemux/Makefile.in index 954f670..9be8ff0 100644 --- a/gst/asfdemux/Makefile.in +++ b/gst/asfdemux/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_LDFLAGS = @GIO_LDFLAGS@ 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/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c index ca6a6e1..f9b13fb 100644 --- a/gst/asfdemux/asfpacket.c +++ b/gst/asfdemux/asfpacket.c @@ -60,6 +60,7 @@ asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset, val = GST_READ_UINT32_LE (*p_data); break; default: + val = 0; g_assert_not_reached (); } @@ -132,6 +133,12 @@ gst_asf_payload_queue_for_stream (GstASFDemux * demux, AsfPayload * payload, { GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT, stream->id, GST_TIME_ARGS (payload->ts)); + + /* Before preroll ts might be invalid and set to 0 */ + if (G_UNLIKELY (payload->ts == 0 && demux->preroll)) { + payload->ts = GST_CLOCK_TIME_NONE; + } + /* remember the first timestamp in the stream */ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->first_ts) && GST_CLOCK_TIME_IS_VALID (payload->ts))) { @@ -141,7 +148,9 @@ gst_asf_payload_queue_for_stream (GstASFDemux * demux, AsfPayload * payload, } /* make timestamps start from 0 */ - if (G_LIKELY (demux->first_ts < payload->ts)) + if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (demux->first_ts) && + GST_CLOCK_TIME_IS_VALID (payload->ts) && + demux->first_ts < payload->ts)) payload->ts -= demux->first_ts; else payload->ts = 0; @@ -493,14 +502,14 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, return TRUE; } -gboolean +GstAsfDemuxParsePacketError gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) { AsfPacket packet = { 0, }; GstMapInfo map; const guint8 *data; gboolean has_multiple_payloads; - gboolean ret = TRUE; + GstAsfDemuxParsePacketError ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE; guint8 ec_flags, flags1; guint size; @@ -510,8 +519,11 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) GST_LOG_OBJECT (demux, "Buffer size: %u", size); /* need at least two payload flag bytes, send time, and duration */ - if (G_UNLIKELY (size < 2 + 4 + 2)) - goto short_packet; + if (G_UNLIKELY (size < 2 + 4 + 2)) { + GST_WARNING_OBJECT (demux, "Packet size is < 8"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; + } packet.buf = buf; /* evidently transient */ @@ -534,8 +546,11 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) GST_LOG_OBJECT (demux, "packet has error correction (%u bytes)", ec_len); /* still need at least two payload flag bytes, send time, and duration */ - if (size <= (1 + ec_len) + 2 + 4 + 2) - goto short_packet; + if (size <= (1 + ec_len) + 2 + 4 + 2) { + GST_WARNING_OBJECT (demux, "Packet size is < 8 with Error Correction"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; + goto done; + } data += 1 + ec_len; size -= 1 + ec_len; @@ -556,8 +571,11 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) packet.padding = asf_packet_read_varlen_int (flags1, 3, &data, &size); - if (G_UNLIKELY (size < 6)) - goto short_packet; + if (G_UNLIKELY (size < 6)) { + GST_WARNING_OBJECT (demux, "Packet size is < 6"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; + goto done; + } packet.send_time = GST_READ_UINT32_LE (data) * GST_MSECOND; packet.duration = GST_READ_UINT16_LE (data + 4) * GST_MSECOND; @@ -575,8 +593,11 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) GST_LOG_OBJECT (demux, "duration : %" GST_TIME_FORMAT, GST_TIME_ARGS (packet.duration)); - if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) - goto short_packet; + if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) { + GST_WARNING_OBJECT (demux, "No padding, or padding bigger than buffer"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; + } size -= packet.padding; @@ -588,7 +609,9 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) "adjusting available data size"); if (size < demux->packet_size - packet.length) { /* the buffer is smaller than the implicit padding */ - goto short_packet; + GST_WARNING_OBJECT (demux, "Buffer is smaller than the implicit padding"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; } else { /* subtract the implicit padding */ size -= (demux->packet_size - packet.length); @@ -598,8 +621,11 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) if (has_multiple_payloads) { guint i, num, lentype; - if (G_UNLIKELY (size < 1)) - goto short_packet; + if (G_UNLIKELY (size < 1)) { + GST_WARNING_OBJECT (demux, "No room more in buffer"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + goto done; + } num = (GST_READ_UINT8 (data) & 0x3F) >> 0; lentype = (GST_READ_UINT8 (data) & 0xC0) >> 6; @@ -613,26 +639,23 @@ gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf) GST_LOG_OBJECT (demux, "Parsing payload %u/%u, size left: %u", i + 1, num, size); - ret = gst_asf_demux_parse_payload (demux, &packet, lentype, &data, &size); - - if (G_UNLIKELY (!ret)) { + if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, lentype, + &data, &size))) { GST_WARNING_OBJECT (demux, "Failed to parse payload %u/%u", i + 1, num); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL; break; } } } else { GST_LOG_OBJECT (demux, "Parsing single payload"); - ret = gst_asf_demux_parse_payload (demux, &packet, -1, &data, &size); + if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, -1, &data, + &size))) { + GST_WARNING_OBJECT (demux, "Failed to parse payload"); + ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE; + } } +done: gst_buffer_unmap (buf, &map); return ret; - -/* ERRORS */ -short_packet: - { - gst_buffer_unmap (buf, &map); - GST_WARNING_OBJECT (demux, "Short packet!"); - return FALSE; - } } diff --git a/gst/asfdemux/asfpacket.h b/gst/asfdemux/asfpacket.h index a1722c8..99655f7 100644 --- a/gst/asfdemux/asfpacket.h +++ b/gst/asfdemux/asfpacket.h @@ -57,7 +57,13 @@ typedef struct { guint8 prop_flags; /* payload length types */ } AsfPacket; -gboolean gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf); +typedef enum { + GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE, + GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE, + GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL +} GstAsfDemuxParsePacketError; + +GstAsfDemuxParsePacketError gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf); #define gst_asf_payload_is_complete(payload) \ ((payload)->buf_filled >= (payload)->mo_size) diff --git a/gst/asfdemux/gstasfdemux.c b/gst/asfdemux/gstasfdemux.c index 51c421e..eb41a50 100644 --- a/gst/asfdemux/gstasfdemux.c +++ b/gst/asfdemux/gstasfdemux.c @@ -143,7 +143,7 @@ gst_asf_demux_free_stream (GstASFDemux * demux, AsfStream * stream) { gst_caps_replace (&stream->caps, NULL); if (stream->pending_tags) { - gst_tag_list_free (stream->pending_tags); + gst_tag_list_unref (stream->pending_tags); stream->pending_tags = NULL; } if (stream->pad) { @@ -186,7 +186,7 @@ gst_asf_demux_reset (GstASFDemux * demux, gboolean chain_reset) demux->adapter = NULL; } if (demux->taglist) { - gst_tag_list_free (demux->taglist); + gst_tag_list_unref (demux->taglist); demux->taglist = NULL; } if (demux->metadata) { @@ -337,7 +337,7 @@ gst_asf_demux_activate_mode (GstPad * sinkpad, GstObject * parent, demux->streaming = FALSE; res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_asf_demux_loop, - demux); + demux, NULL); } else { res = gst_pad_stop_task (sinkpad); } @@ -644,8 +644,9 @@ gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event) return FALSE; } /* we can (re)construct the start later on, but not the end */ - if (stop_type != GST_SEEK_TYPE_NONE) { - GST_LOG_OBJECT (demux, "streaming; end type must be NONE"); + if (stop_type != GST_SEEK_TYPE_NONE && + (stop_type != GST_SEEK_TYPE_SET || GST_CLOCK_TIME_IS_VALID (stop))) { + GST_LOG_OBJECT (demux, "streaming; end position must be NONE"); return FALSE; } gst_event_ref (event); @@ -763,7 +764,7 @@ gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event) skip: /* restart our task since it might have been stopped when we did the flush */ gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_asf_demux_loop, - demux); + demux, NULL); /* streaming can continue now */ GST_PAD_STREAM_UNLOCK (demux->sinkpad); @@ -1431,15 +1432,17 @@ gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force) gst_event_new_segment (&demux->segment)); /* now post any global tags we may have found */ - if (demux->taglist == NULL) + if (demux->taglist == NULL) { demux->taglist = gst_tag_list_new_empty (); + gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL); + } gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE, GST_TAG_CONTAINER_FORMAT, "ASF", NULL); GST_DEBUG_OBJECT (demux, "global tags: %" GST_PTR_FORMAT, demux->taglist); gst_asf_demux_send_event_unlocked (demux, - gst_event_new_tag ("GstDemuxer", demux->taglist)); + gst_event_new_tag (demux->taglist)); demux->taglist = NULL; demux->need_newsegment = FALSE; @@ -1450,7 +1453,7 @@ gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force) if (G_UNLIKELY (stream->pending_tags)) { GST_LOG_OBJECT (stream->pad, "%" 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; } @@ -1491,8 +1494,8 @@ gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force) payload->interlaced); stream->interlaced = payload->interlaced; stream->caps = gst_caps_make_writable (stream->caps); - gst_caps_set_simple (stream->caps, "interlaced", G_TYPE_BOOLEAN, - stream->interlaced, NULL); + gst_caps_set_simple (stream->caps, "interlace-mode", G_TYPE_BOOLEAN, + (stream->interlaced ? "mixed" : "progressive"), NULL); gst_pad_set_caps (stream->pad, stream->caps); } @@ -1516,8 +1519,13 @@ gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force) GST_TIME_ARGS (GST_BUFFER_DURATION (payload->buf)), gst_buffer_get_size (payload->buf)); - ret = gst_pad_push (stream->pad, payload->buf); - ret = gst_asf_demux_aggregate_flow_return (demux, stream, ret); + if (stream->active) { + ret = gst_pad_push (stream->pad, payload->buf); + ret = gst_asf_demux_aggregate_flow_return (demux, stream, ret); + } else { + gst_buffer_unref (payload->buf); + ret = GST_FLOW_OK; + } payload->buf = NULL; g_array_remove_index (stream->payloads, 0); @@ -1621,9 +1629,9 @@ gst_asf_demux_loop (GstASFDemux * demux) } if (G_LIKELY (demux->speed_packets == 1)) { - /* FIXME: maybe we should just skip broken packets and error out only - * after a few broken packets in a row? */ - if (G_UNLIKELY (!gst_asf_demux_parse_packet (demux, buf))) { + GstAsfDemuxParsePacketError err; + err = gst_asf_demux_parse_packet (demux, buf); + if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) { /* when we don't know when the data object ends, we should check * for a chained asf */ if (demux->num_packets == 0) { @@ -1635,7 +1643,13 @@ gst_asf_demux_loop (GstASFDemux * demux) return; } } - goto parse_error; + /* FIXME: We should tally up fatal errors and error out only + * after a few broken packets in a row? */ + + GST_INFO_OBJECT (demux, "Ignoring recoverable parse error"); + gst_buffer_unref (buf); + ++demux->packet; + return; } flow = gst_asf_demux_push_complete_payloads (demux, FALSE); @@ -1646,13 +1660,13 @@ gst_asf_demux_loop (GstASFDemux * demux) guint n; for (n = 0; n < demux->speed_packets; n++) { GstBuffer *sub; + GstAsfDemuxParsePacketError err; sub = - gst_buffer_copy_region (buf, GST_BUFFER_COPY_NONE, + gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, n * demux->packet_size, demux->packet_size); - /* FIXME: maybe we should just skip broken packets and error out only - * after a few broken packets in a row? */ - if (G_UNLIKELY (!gst_asf_demux_parse_packet (demux, sub))) { + err = gst_asf_demux_parse_packet (demux, sub); + if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) { /* when we don't know when the data object ends, we should check * for a chained asf */ if (demux->num_packets == 0) { @@ -1665,12 +1679,17 @@ gst_asf_demux_loop (GstASFDemux * demux) return; } } - goto parse_error; + /* FIXME: We should tally up fatal errors and error out only + * after a few broken packets in a row? */ + + GST_INFO_OBJECT (demux, "Ignoring recoverable parse error"); + flow = GST_FLOW_OK; } gst_buffer_unref (sub); - flow = gst_asf_demux_push_complete_payloads (demux, FALSE); + if (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE) + flow = gst_asf_demux_push_complete_payloads (demux, FALSE); ++demux->packet; @@ -1719,6 +1738,8 @@ eos: gst_element_post_message (GST_ELEMENT_CAST (demux), gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME, stop)); + gst_asf_demux_send_event_unlocked (demux, + gst_event_new_segment_done (GST_FORMAT_TIME, stop)); } else if (flow != GST_FLOW_EOS) { /* check if we have a chained asf, in case, we don't eos yet */ if (gst_asf_demux_check_chained_asf (demux)) { @@ -1762,6 +1783,8 @@ read_failed: flow = GST_FLOW_EOS; goto pause; } +#if 0 + /* See FIXMEs above */ parse_error: { gst_buffer_unref (buf); @@ -1771,6 +1794,7 @@ parse_error: flow = GST_FLOW_ERROR; goto pause; } +#endif } #define GST_ASF_DEMUX_CHECK_HEADER_YES 0 @@ -1855,6 +1879,7 @@ gst_asf_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) while (gst_adapter_available (demux->adapter) >= data_size) { GstBuffer *buf; + GstAsfDemuxParsePacketError err; /* we don't know the length of the stream * check for a chained asf everytime */ @@ -1875,15 +1900,16 @@ gst_asf_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) buf = gst_adapter_take_buffer (demux->adapter, data_size); - /* FIXME: maybe we should just skip broken packets and error out only + /* FIXME: We should tally up fatal errors and error out only * after a few broken packets in a row? */ - if (G_UNLIKELY (!gst_asf_demux_parse_packet (demux, buf))) { - GST_WARNING_OBJECT (demux, "Parse error"); - } + err = gst_asf_demux_parse_packet (demux, buf); gst_buffer_unref (buf); - ret = gst_asf_demux_push_complete_payloads (demux, FALSE); + if (G_LIKELY (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) + ret = gst_asf_demux_push_complete_payloads (demux, FALSE); + else + GST_WARNING_OBJECT (demux, "Parse error"); if (demux->packet >= 0) ++demux->packet; @@ -2261,6 +2287,7 @@ gst_asf_demux_add_video_stream (GstASFDemux * demux, GstBuffer *extradata = NULL; GstPad *src_pad; GstCaps *caps; + gchar *str; gchar *name = NULL; gchar *codec_name = NULL; gint size_left = video->size - 40; @@ -2315,7 +2342,9 @@ gst_asf_demux_add_video_stream (GstASFDemux * demux, } /* add fourcc format to caps, some proprietary decoders seem to need it */ - gst_caps_set_simple (caps, "format", G_TYPE_UINT, video->tag, NULL); + str = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag)); + gst_caps_set_simple (caps, "format", G_TYPE_STRING, str, NULL); + g_free (str); if (codec_name) { tags = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec_name, NULL); @@ -2338,10 +2367,19 @@ static void gst_asf_demux_activate_stream (GstASFDemux * demux, AsfStream * stream) { if (!stream->active) { + gchar *stream_id; + GST_INFO_OBJECT (demux, "Activating stream %2u, pad %s, caps %" GST_PTR_FORMAT, stream->id, GST_PAD_NAME (stream->pad), stream->caps); gst_pad_set_active (stream->pad, TRUE); + + stream_id = + gst_pad_create_stream_id_printf (stream->pad, GST_ELEMENT_CAST (demux), + "%u", stream->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_element_add_pad (GST_ELEMENT_CAST (demux), stream->pad); stream->active = TRUE; } @@ -2518,7 +2556,7 @@ gst_asf_demux_get_gst_tag_from_tag_name (const gchar * name_utf8) "WM/Picture", GST_TAG_IMAGE}, { "WM/Track", GST_TAG_TRACK_NUMBER}, { "WM/TrackNumber", GST_TAG_TRACK_NUMBER}, { - "WM/Year", GST_TAG_DATE} + "WM/Year", GST_TAG_DATE_TIME} /* { "WM/Composer", GST_TAG_COMPOSER } */ }; gsize out; @@ -2553,14 +2591,15 @@ gst_asf_demux_add_global_tags (GstASFDemux * demux, GstTagList * taglist) return; if (gst_tag_list_is_empty (taglist)) { - gst_tag_list_free (taglist); + gst_tag_list_unref (taglist); return; } t = gst_tag_list_merge (demux->taglist, taglist, GST_TAG_MERGE_APPEND); + gst_tag_list_set_scope (t, GST_TAG_SCOPE_GLOBAL); if (demux->taglist) - gst_tag_list_free (demux->taglist); - gst_tag_list_free (taglist); + gst_tag_list_unref (demux->taglist); + gst_tag_list_unref (taglist); demux->taglist = t; GST_LOG_OBJECT (demux, "global tags now: %" GST_PTR_FORMAT, demux->taglist); } @@ -2697,13 +2736,12 @@ gst_asf_demux_process_ext_content_desc (GstASFDemux * demux, guint8 * data, value_utf8[out] = '\0'; if (gst_tag_name != NULL) { - if (strcmp (gst_tag_name, GST_TAG_DATE) == 0) { + if (strcmp (gst_tag_name, GST_TAG_DATE_TIME) == 0) { guint year = atoi (value_utf8); if (year > 0) { - /* FIXME: really want a GDateTime with just the year field */ - g_value_init (&tag_value, G_TYPE_DATE); - g_value_take_boxed (&tag_value, g_date_new_dmy (1, 1, year)); + g_value_init (&tag_value, GST_TYPE_DATE_TIME); + g_value_take_boxed (&tag_value, gst_date_time_new_y (year)); } } else if (strcmp (gst_tag_name, GST_TAG_GENRE) == 0) { guint id3v1_genre_id; @@ -2819,7 +2857,7 @@ gst_asf_demux_process_ext_content_desc (GstASFDemux * demux, guint8 * data, not_enough_data: { GST_WARNING ("Unexpected end of data parsing ext content desc object"); - gst_tag_list_free (taglist); + gst_tag_list_unref (taglist); return GST_FLOW_OK; /* not really fatal */ } } diff --git a/gst/asfdemux/gstrtpasfdepay.c b/gst/asfdemux/gstrtpasfdepay.c index 52d57d3..4a6b5ab 100644 --- a/gst/asfdemux/gstrtpasfdepay.c +++ b/gst/asfdemux/gstrtpasfdepay.c @@ -241,14 +241,13 @@ field_size (guint8 field) } } -/* - * Set the padding field to te correct value as the spec +/* Set the padding field to te correct value as the spec * says it should be se to 0 in the rtp packets */ -static void -gst_rtp_asf_depay_set_padding (GstRtpAsfDepay * depayload, - GstBuffer * buf, guint32 padding) +static GstBuffer * +gst_rtp_asf_depay_update_padding (GstRtpAsfDepay * depayload, GstBuffer * buf) { + GstBuffer *result; GstMapInfo map; guint8 *data; gint offset = 0; @@ -256,9 +255,26 @@ gst_rtp_asf_depay_set_padding (GstRtpAsfDepay * depayload, guint8 seq_type; guint8 pad_type; guint8 pkt_type; + gsize plen, padding; + + plen = gst_buffer_get_size (buf); + if (plen == depayload->packet_size) + return buf; + + padding = depayload->packet_size - plen; + + GST_LOG_OBJECT (depayload, + "padding buffer size %" G_GSIZE_FORMAT " to packet size %d", plen, + depayload->packet_size); + + result = gst_buffer_new_and_alloc (depayload->packet_size); - gst_buffer_map (buf, &map, GST_MAP_READ); + gst_buffer_map (result, &map, GST_MAP_READ); data = map.data; + memset (data + plen, 0, padding); + + gst_buffer_extract (buf, 0, data, plen); + gst_buffer_unref (buf); aux = data[offset++]; if (aux & 0x80) { @@ -267,8 +283,8 @@ gst_rtp_asf_depay_set_padding (GstRtpAsfDepay * depayload, GST_WARNING_OBJECT (depayload, "Error correction length type should be " "set to 0"); /* this packet doesn't follow the spec */ - gst_buffer_unmap (buf, &map); - return; + gst_buffer_unmap (result, &map); + return result; } err_len = aux & 0x0F; offset += err_len; @@ -305,7 +321,9 @@ gst_rtp_asf_depay_set_padding (GstRtpAsfDepay * depayload, default: break; } - gst_buffer_unmap (buf, &map); + gst_buffer_unmap (result, &map); + + return result; } /* Docs: 'RTSP Protocol PDF' document from http://sdp.ppona.com/ (page 8) */ @@ -342,7 +360,6 @@ gst_rtp_asf_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) do { guint packet_len; - gsize plen; /* packet header is at least 4 bytes */ if (payload_len < 4) @@ -459,23 +476,7 @@ gst_rtp_asf_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) if (!outbuf) return NULL; - /* we need to pad with zeroes to packet_size if it's smaller */ - plen = gst_buffer_get_size (outbuf); - if (plen < depay->packet_size) { - GstBuffer *tmp; - - GST_LOG_OBJECT (depay, - "padding buffer size %" G_GSIZE_FORMAT " to packet size %d", plen, - depay->packet_size); - - tmp = gst_buffer_new_and_alloc (depay->packet_size); - gst_buffer_copy_into (tmp, outbuf, GST_BUFFER_COPY_ALL, 0, plen); - gst_buffer_unref (outbuf); - outbuf = tmp; - - gst_buffer_memset (outbuf, plen, 0, depay->packet_size - plen); - gst_rtp_asf_depay_set_padding (depay, outbuf, depay->packet_size - plen); - } + outbuf = gst_rtp_asf_depay_update_padding (depay, outbuf); if (!S) GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT); diff --git a/gst/dvdlpcmdec/Makefile.in b/gst/dvdlpcmdec/Makefile.in index cbf32ca..3e84480 100644 --- a/gst/dvdlpcmdec/Makefile.in +++ b/gst/dvdlpcmdec/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, @@ -234,7 +234,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/dvdlpcmdec/gstdvdlpcmdec.c b/gst/dvdlpcmdec/gstdvdlpcmdec.c index f97a475..b46d512 100644 --- a/gst/dvdlpcmdec/gstdvdlpcmdec.c +++ b/gst/dvdlpcmdec/gstdvdlpcmdec.c @@ -209,8 +209,7 @@ gst_dvdlpcmdec_send_tags (GstDvdLpcmDec * dvdlpcmdec) taglist = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "LPCM Audio", GST_TAG_BITRATE, bitrate, NULL); - gst_pad_push_event (dvdlpcmdec->srcpad, gst_event_new_tag ("GstDecoder", - taglist)); + gst_pad_push_event (dvdlpcmdec->srcpad, gst_event_new_tag (taglist)); } static gboolean diff --git a/gst/dvdsub/Makefile.in b/gst/dvdsub/Makefile.in index e3d6102..d6e7620 100644 --- a/gst/dvdsub/Makefile.in +++ b/gst/dvdsub/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, @@ -235,7 +235,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/realmedia/Makefile.in b/gst/realmedia/Makefile.in index 5c275cf..0c77a57 100644 --- a/gst/realmedia/Makefile.in +++ b/gst/realmedia/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_LDFLAGS = @GIO_LDFLAGS@ 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/realmedia/gstrdtbuffer.c b/gst/realmedia/gstrdtbuffer.c index 3adf978..4057045 100644 --- a/gst/realmedia/gstrdtbuffer.c +++ b/gst/realmedia/gstrdtbuffer.c @@ -16,6 +16,7 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ +#include <string.h> #include "gstrdtbuffer.h" @@ -205,6 +206,7 @@ gst_rdt_buffer_get_first_packet (GstBuffer * buffer, GstRDTPacket * packet) packet->buffer = buffer; packet->offset = 0; packet->type = GST_RDT_TYPE_INVALID; + memset (&packet->map, 0, sizeof (GstMapInfo)); if (!read_packet_header (packet)) return FALSE; diff --git a/gst/realmedia/rademux.c b/gst/realmedia/rademux.c index 0260c58..91fbc08 100644 --- a/gst/realmedia/rademux.c +++ b/gst/realmedia/rademux.c @@ -127,7 +127,7 @@ gst_real_audio_demux_reset (GstRealAudioDemux * demux) } if (demux->pending_tags) { - gst_tag_list_free (demux->pending_tags); + gst_tag_list_unref (demux->pending_tags); demux->pending_tags = NULL; } @@ -224,7 +224,7 @@ gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad, GstObject * parent, demux->seekable = TRUE; res = gst_pad_start_task (sinkpad, - (GstTaskFunction) gst_real_audio_demux_loop, demux); + (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL); } else { demux->seekable = FALSE; res = gst_pad_stop_task (sinkpad); @@ -319,6 +319,7 @@ gst_real_audio_demux_parse_header (GstRealAudioDemux * demux) const guint8 *data; gchar *codec_name = NULL; GstCaps *caps = NULL; + gchar *stream_id; guint avail; g_assert (demux->ra_version == 4 || demux->ra_version == 3); @@ -364,6 +365,7 @@ gst_real_audio_demux_parse_header (GstRealAudioDemux * demux) demux->fourcc = GST_READ_UINT32_LE (data + 56); demux->pending_tags = gst_rm_utils_read_tags (data + 63, demux->data_offset - 63, gst_rm_utils_read_string8); + gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL); break; default: g_assert_not_reached (); @@ -436,15 +438,22 @@ gst_real_audio_demux_parse_header (GstRealAudioDemux * demux) GST_INFO_OBJECT (demux, "Adding source pad, caps %" GST_PTR_FORMAT, caps); demux->srcpad = gst_pad_new_from_static_template (&src_template, "src"); - gst_pad_use_fixed_caps (demux->srcpad); - gst_pad_set_caps (demux->srcpad, caps); - codec_name = gst_pb_utils_get_codec_description (caps); - gst_caps_unref (caps); gst_pad_set_event_function (demux->srcpad, GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_event)); gst_pad_set_query_function (demux->srcpad, GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_query)); gst_pad_set_active (demux->srcpad, TRUE); + gst_pad_use_fixed_caps (demux->srcpad); + + stream_id = + gst_pad_create_stream_id (demux->srcpad, GST_ELEMENT_CAST (demux), NULL); + gst_pad_push_event (demux->srcpad, gst_event_new_stream_start (stream_id)); + g_free (stream_id); + + gst_pad_set_caps (demux->srcpad, caps); + codec_name = gst_pb_utils_get_codec_description (caps); + gst_caps_unref (caps); + gst_element_add_pad (GST_ELEMENT (demux), demux->srcpad); if (demux->byterate_num > 0 && demux->byterate_denom > 0) { @@ -469,8 +478,10 @@ gst_real_audio_demux_parse_header (GstRealAudioDemux * demux) demux->need_newsegment = TRUE; if (codec_name) { - if (demux->pending_tags == NULL) + if (demux->pending_tags == NULL) { demux->pending_tags = gst_tag_list_new_empty (); + gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL); + } gst_tag_list_add (demux->pending_tags, GST_TAG_MERGE_REPLACE, GST_TAG_AUDIO_CODEC, codec_name, NULL); @@ -532,7 +543,7 @@ gst_real_audio_demux_parse_data (GstRealAudioDemux * demux) if (demux->pending_tags) { gst_pad_push_event (demux->srcpad, - gst_event_new_tag ("GstDemuxer", demux->pending_tags)); + gst_event_new_tag (demux->pending_tags)); demux->pending_tags = NULL; } @@ -697,6 +708,8 @@ eos: gst_element_post_message (GST_ELEMENT (demux), gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME, stop)); + gst_pad_push_event (demux->srcpad, + gst_event_new_segment_done (GST_FORMAT_TIME, stop)); } else { /* normal playback, send EOS event downstream */ GST_DEBUG_OBJECT (demux, "sending EOS event, at end of stream"); @@ -808,7 +821,7 @@ gst_real_audio_demux_handle_seek (GstRealAudioDemux * demux, GstEvent * event) demux->segment_running = TRUE; /* restart our task since it might have been stopped when we did the flush */ gst_pad_start_task (demux->sinkpad, - (GstTaskFunction) gst_real_audio_demux_loop, demux); + (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL); /* streaming can continue now */ GST_PAD_STREAM_UNLOCK (demux->sinkpad); diff --git a/gst/realmedia/rdtmanager.c b/gst/realmedia/rdtmanager.c index 244c0cb..3ee7bc1 100644 --- a/gst/realmedia/rdtmanager.c +++ b/gst/realmedia/rdtmanager.c @@ -77,6 +77,7 @@ enum SIGNAL_ON_BYE_SSRC, SIGNAL_ON_BYE_TIMEOUT, SIGNAL_ON_TIMEOUT, + SIGNAL_ON_NPT_STOP, LAST_SIGNAL }; @@ -298,15 +299,16 @@ activate_session (GstRDTManager * rdtmanager, GstRDTManagerSession * session, session->recv_rtp_src = gst_pad_new_from_template (templ, name); g_free (name); - gst_pad_set_caps (session->recv_rtp_src, caps); - gst_caps_unref (caps); - gst_pad_set_element_private (session->recv_rtp_src, session); gst_pad_set_query_function (session->recv_rtp_src, gst_rdt_manager_query_src); gst_pad_set_activatemode_function (session->recv_rtp_src, gst_rdt_manager_src_activate_mode); gst_pad_set_active (session->recv_rtp_src, TRUE); + + gst_pad_set_caps (session->recv_rtp_src, caps); + gst_caps_unref (caps); + gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_src); return TRUE; @@ -479,6 +481,21 @@ gst_rdt_manager_class_init (GstRDTManagerClass * g_class) NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); + /** + * GstRDTManager::on-npt-stop: + * @rtpbin: the object which received the signal + * @session: the session + * @ssrc: the SSRC + * + * Notify that SSRC sender has sent data up to the configured NPT stop time. + */ + gst_rdt_manager_signals[SIGNAL_ON_NPT_STOP] = + g_signal_new ("on-npt-stop", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_npt_stop), + NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2, + G_TYPE_UINT, G_TYPE_UINT); + + gstelement_class->provide_clock = GST_DEBUG_FUNCPTR (gst_rdt_manager_provide_clock); gstelement_class->change_state = @@ -588,7 +605,7 @@ gst_rdt_manager_src_activate_mode (GstPad * pad, GstObject * parent, GST_DEBUG_OBJECT (rdtmanager, "Starting task on srcpad"); result = gst_pad_start_task (pad, (GstTaskFunction) gst_rdt_manager_loop, - pad); + pad, NULL); } else { /* make sure all data processing stops ASAP */ JBUF_LOCK (session); diff --git a/gst/realmedia/rdtmanager.h b/gst/realmedia/rdtmanager.h index 2816817..948c298 100644 --- a/gst/realmedia/rdtmanager.h +++ b/gst/realmedia/rdtmanager.h @@ -81,6 +81,7 @@ struct _GstRDTManagerClass { void (*on_bye_ssrc) (GstRDTManager *rtpdec, guint session, guint32 ssrc); void (*on_bye_timeout) (GstRDTManager *rtpdec, guint session, guint32 ssrc); void (*on_timeout) (GstRDTManager *rtpdec, guint session, guint32 ssrc); + void (*on_npt_stop) (GstRDTManager *rtpdec, guint session, guint32 ssrc); }; GType gst_rdt_manager_get_type(void); diff --git a/gst/realmedia/rmdemux.c b/gst/realmedia/rmdemux.c index e2ed8ac..8624339 100644 --- a/gst/realmedia/rmdemux.c +++ b/gst/realmedia/rmdemux.c @@ -585,7 +585,7 @@ gst_rmdemux_perform_seek (GstRMDemux * rmdemux, GstEvent * event) /* restart our task since it might have been stopped when we did the * flush. */ gst_pad_start_task (rmdemux->sinkpad, (GstTaskFunction) gst_rmdemux_loop, - rmdemux->sinkpad); + rmdemux->sinkpad, NULL); } done: @@ -669,7 +669,7 @@ gst_rmdemux_reset (GstRMDemux * rmdemux) gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream); gst_element_remove_pad (GST_ELEMENT (rmdemux), stream->pad); if (stream->pending_tags) - gst_tag_list_free (stream->pending_tags); + gst_tag_list_unref (stream->pending_tags); if (stream->subpackets) g_ptr_array_free (stream->subpackets, TRUE); g_free (stream->index); @@ -681,7 +681,7 @@ gst_rmdemux_reset (GstRMDemux * rmdemux) rmdemux->n_video_streams = 0; if (rmdemux->pending_tags != NULL) { - gst_tag_list_free (rmdemux->pending_tags); + gst_tag_list_unref (rmdemux->pending_tags); rmdemux->pending_tags = NULL; } @@ -791,7 +791,7 @@ gst_rmdemux_sink_activate_mode (GstPad * sinkpad, GstObject * parent, demux->data_offset = G_MAXUINT; res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_rmdemux_loop, - sinkpad); + sinkpad, NULL); } else { res = gst_pad_stop_task (sinkpad); } @@ -922,6 +922,8 @@ need_pause: gst_element_post_message (GST_ELEMENT (rmdemux), gst_message_new_segment_done (GST_OBJECT (rmdemux), GST_FORMAT_TIME, stop)); + gst_rmdemux_send_event (rmdemux, + gst_event_new_segment_done (GST_FORMAT_TIME, stop)); } else { /* normal playback, send EOS to all linked pads */ GST_LOG_OBJECT (rmdemux, "Sending EOS, at end of stream"); @@ -1279,6 +1281,7 @@ gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream) GstCaps *stream_caps = NULL; const gchar *codec_tag = NULL; gchar *codec_name = NULL; + gchar *stream_id; int version = 0; if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) { @@ -1477,7 +1480,6 @@ gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream) gst_pad_use_fixed_caps (stream->pad); - gst_pad_set_caps (stream->pad, stream_caps); gst_pad_set_event_function (stream->pad, GST_DEBUG_FUNCPTR (gst_rmdemux_src_event)); gst_pad_set_query_function (stream->pad, @@ -1486,7 +1488,14 @@ gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream) GST_DEBUG_OBJECT (rmdemux, "adding pad %s with caps %" GST_PTR_FORMAT ", stream_id=%d", GST_PAD_NAME (stream->pad), stream_caps, stream->id); gst_pad_set_active (stream->pad, TRUE); - gst_element_add_pad (GST_ELEMENT_CAST (rmdemux), stream->pad); + + stream_id = + gst_pad_create_stream_id_printf (stream->pad, + GST_ELEMENT_CAST (rmdemux), "%u", stream->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); codec_name = gst_pb_utils_get_codec_description (stream_caps); @@ -1498,6 +1507,7 @@ gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream) codec_tag, codec_name, NULL); g_free (codec_name); } + gst_element_add_pad (GST_ELEMENT_CAST (rmdemux), stream->pad); } beach: @@ -2129,6 +2139,7 @@ gst_rmdemux_handle_scrambled_packet (GstRMDemux * rmdemux, ret = gst_rmdemux_descramble_sipr_audio (rmdemux, stream); break; default: + ret = GST_FLOW_ERROR; g_assert_not_reached (); } @@ -2619,15 +2630,14 @@ gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version) if (rmdemux->pending_tags != NULL) { gst_rmdemux_send_event (rmdemux, - gst_event_new_tag ("GstDemuxer", rmdemux->pending_tags)); + gst_event_new_tag (rmdemux->pending_tags)); rmdemux->pending_tags = NULL; } } if (stream->pending_tags != NULL) { GST_LOG_OBJECT (stream->pad, "tags %" GST_PTR_FORMAT, stream->pending_tags); - gst_pad_push_event (stream->pad, gst_event_new_tag ("GstDemuxer", - stream->pending_tags)); + gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags)); stream->pending_tags = NULL; } diff --git a/gst/realmedia/rmutils.c b/gst/realmedia/rmutils.c index 3232ee8..34671ce 100644 --- a/gst/realmedia/rmutils.c +++ b/gst/realmedia/rmutils.c @@ -118,7 +118,7 @@ gst_rm_utils_read_tags (const guint8 * data, guint datalen, if (gst_tag_list_n_tags (tags) > 0) return tags; - gst_tag_list_free (tags); + gst_tag_list_unref (tags); return NULL; } diff --git a/gst/synaesthesia/Makefile.am b/gst/synaesthesia/Makefile.am deleted file mode 100644 index da4f986..0000000 --- a/gst/synaesthesia/Makefile.am +++ /dev/null @@ -1,26 +0,0 @@ -plugin_LTLIBRARIES = libgstsynaesthesia.la - -libgstsynaesthesia_la_SOURCES = gstsynaesthesia.c synaescope.c - -noinst_HEADERS = synaescope.h gstsynaesthesia.h - -libgstsynaesthesia_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) -libgstsynaesthesia_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) -libgstsynaesthesia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -libgstsynaesthesia_la_LIBTOOLFLAGS = --tag=disable-static - -EXTRA_DIST = README - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstsynaesthesia -:SHARED libgstsynaesthesia \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstsynaesthesia_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsynaesthesia_la_CFLAGS) \ - -:LDFLAGS $(libgstsynaesthesia_la_LDFLAGS) \ - $(libgstsynaesthesia_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ diff --git a/gst/synaesthesia/Makefile.in b/gst/synaesthesia/Makefile.in deleted file mode 100644 index e15f6b0..0000000 --- a/gst/synaesthesia/Makefile.in +++ /dev/null @@ -1,786 +0,0 @@ -# Makefile.in generated by automake 1.11.5 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -am__make_dryrun = \ - { \ - am__dry=no; \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ - | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ - *) \ - for am__flg in $$MAKEFLAGS; do \ - case $$am__flg in \ - *=*|--*) ;; \ - *n*) am__dry=yes; break;; \ - esac; \ - done;; \ - esac; \ - test $$am__dry = yes; \ - } -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = gst/synaesthesia -DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ - $(top_srcdir)/common/m4/as-auto-alt.m4 \ - $(top_srcdir)/common/m4/as-compiler-flag.m4 \ - $(top_srcdir)/common/m4/as-libtool.m4 \ - $(top_srcdir)/common/m4/as-python.m4 \ - $(top_srcdir)/common/m4/as-scrub-include.m4 \ - $(top_srcdir)/common/m4/as-version.m4 \ - $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/common/m4/gst-arch.m4 \ - $(top_srcdir)/common/m4/gst-args.m4 \ - $(top_srcdir)/common/m4/gst-check.m4 \ - $(top_srcdir)/common/m4/gst-default.m4 \ - $(top_srcdir)/common/m4/gst-dowhile.m4 \ - $(top_srcdir)/common/m4/gst-error.m4 \ - $(top_srcdir)/common/m4/gst-feature.m4 \ - $(top_srcdir)/common/m4/gst-function.m4 \ - $(top_srcdir)/common/m4/gst-gettext.m4 \ - $(top_srcdir)/common/m4/gst-glib2.m4 \ - $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ - $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ - $(top_srcdir)/common/m4/gst-plugindir.m4 \ - $(top_srcdir)/common/m4/gst.m4 \ - $(top_srcdir)/common/m4/gtk-doc.m4 \ - $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ - $(top_srcdir)/m4/a52.m4 $(top_srcdir)/m4/gettext.m4 \ - $(top_srcdir)/m4/gst-sid.m4 $(top_srcdir)/m4/iconv.m4 \ - $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ - $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ - $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ - $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ - $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(plugindir)" -LTLIBRARIES = $(plugin_LTLIBRARIES) -am__DEPENDENCIES_1 = -libgstsynaesthesia_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -am_libgstsynaesthesia_la_OBJECTS = \ - libgstsynaesthesia_la-gstsynaesthesia.lo \ - libgstsynaesthesia_la-synaescope.lo -libgstsynaesthesia_la_OBJECTS = $(am_libgstsynaesthesia_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -libgstsynaesthesia_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(libgstsynaesthesia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(libgstsynaesthesia_la_CFLAGS) $(CFLAGS) \ - $(libgstsynaesthesia_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libgstsynaesthesia_la_SOURCES) -DIST_SOURCES = $(libgstsynaesthesia_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -A52DEC_CFLAGS = @A52DEC_CFLAGS@ -A52DEC_LIBS = @A52DEC_LIBS@ -ACLOCAL = @ACLOCAL@ -ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ -AMRNB_CFLAGS = @AMRNB_CFLAGS@ -AMRNB_LIBS = @AMRNB_LIBS@ -AMRWB_CFLAGS = @AMRWB_CFLAGS@ -AMRWB_LIBS = @AMRWB_LIBS@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CDIO_CFLAGS = @CDIO_CFLAGS@ -CDIO_LIBS = @CDIO_LIBS@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@ -DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@ -DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@ -DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@ -DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -DVDREAD_LIBS = @DVDREAD_LIBS@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ERROR_CFLAGS = @ERROR_CFLAGS@ -ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ -EXEEXT = @EXEEXT@ -FFLAGS = @FFLAGS@ -FGREP = @FGREP@ -GCOV = @GCOV@ -GCOV_CFLAGS = @GCOV_CFLAGS@ -GCOV_LIBS = @GCOV_LIBS@ -GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ -GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ -GIO_CFLAGS = @GIO_CFLAGS@ -GIO_LDFLAGS = @GIO_LDFLAGS@ -GIO_LIBS = @GIO_LIBS@ -GLIB_CFLAGS = @GLIB_CFLAGS@ -GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ -GLIB_LIBS = @GLIB_LIBS@ -GLIB_PREFIX = @GLIB_PREFIX@ -GLIB_REQ = @GLIB_REQ@ -GMSGFMT = @GMSGFMT@ -GMSGFMT_015 = @GMSGFMT_015@ -GREP = @GREP@ -GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@ -GSTPB_PREFIX = @GSTPB_PREFIX@ -GST_AGE = @GST_AGE@ -GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@ -GST_API_VERSION = @GST_API_VERSION@ -GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ -GST_BASE_LIBS = @GST_BASE_LIBS@ -GST_CFLAGS = @GST_CFLAGS@ -GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@ -GST_CHECK_LIBS = @GST_CHECK_LIBS@ -GST_CURRENT = @GST_CURRENT@ -GST_CXXFLAGS = @GST_CXXFLAGS@ -GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@ -GST_LIBS = @GST_LIBS@ -GST_LIBVERSION = @GST_LIBVERSION@ -GST_LICENSE = @GST_LICENSE@ -GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ -GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ -GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ -GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ -GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@ -GST_PLUGINS_ALL = @GST_PLUGINS_ALL@ -GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ -GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@ -GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ -GST_PLUGINS_DIR = @GST_PLUGINS_DIR@ -GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@ -GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@ -GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ -GST_PREFIX = @GST_PREFIX@ -GST_REVISION = @GST_REVISION@ -GST_TOOLS_DIR = @GST_TOOLS_DIR@ -GTKDOC_CHECK = @GTKDOC_CHECK@ -GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ -GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ -GTKDOC_MKPDF = @GTKDOC_MKPDF@ -GTKDOC_REBASE = @GTKDOC_REBASE@ -HAVE_CXX = @HAVE_CXX@ -HAVE_DVDREAD = @HAVE_DVDREAD@ -HAVE_LAME = @HAVE_LAME@ -HTML_DIR = @HTML_DIR@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -INTLLIBS = @INTLLIBS@ -INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ -LAME_CFLAGS = @LAME_CFLAGS@ -LAME_LIBS = @LAME_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBICONV = @LIBICONV@ -LIBINTL = @LIBINTL@ -LIBM = @LIBM@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LOCALEDIR = @LOCALEDIR@ -LTLIBICONV = @LTLIBICONV@ -LTLIBINTL = @LTLIBINTL@ -LTLIBOBJS = @LTLIBOBJS@ -MAD_CFLAGS = @MAD_CFLAGS@ -MAD_LIBS = @MAD_LIBS@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MPEG2DEC_CFLAGS = @MPEG2DEC_CFLAGS@ -MPEG2DEC_LIBS = @MPEG2DEC_LIBS@ -MSGFMT = @MSGFMT@ -MSGFMT_015 = @MSGFMT_015@ -MSGMERGE = @MSGMERGE@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -ORCC = @ORCC@ -ORCC_FLAGS = @ORCC_FLAGS@ -ORC_CFLAGS = @ORC_CFLAGS@ -ORC_LIBS = @ORC_LIBS@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ -PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ -PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ -PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ -PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PLUGINDIR = @PLUGINDIR@ -POSUB = @POSUB@ -PROFILE_CFLAGS = @PROFILE_CFLAGS@ -PYTHON = @PYTHON@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SIDPLAY_CFLAGS = @SIDPLAY_CFLAGS@ -SIDPLAY_LIBS = @SIDPLAY_LIBS@ -STRIP = @STRIP@ -TWOLAME_CFLAGS = @TWOLAME_CFLAGS@ -TWOLAME_LIBS = @TWOLAME_LIBS@ -USE_NLS = @USE_NLS@ -VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ -VALGRIND_LIBS = @VALGRIND_LIBS@ -VALGRIND_PATH = @VALGRIND_PATH@ -VERSION = @VERSION@ -WARNING_CFLAGS = @WARNING_CFLAGS@ -WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ -WIN32_LIBS = @WIN32_LIBS@ -X264_CFLAGS = @X264_CFLAGS@ -X264_LIBS = @X264_LIBS@ -XGETTEXT = @XGETTEXT@ -XGETTEXT_015 = @XGETTEXT_015@ -XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -plugindir = @plugindir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -plugin_LTLIBRARIES = libgstsynaesthesia.la -libgstsynaesthesia_la_SOURCES = gstsynaesthesia.c synaescope.c -noinst_HEADERS = synaescope.h gstsynaesthesia.h -libgstsynaesthesia_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) -libgstsynaesthesia_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) -libgstsynaesthesia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -libgstsynaesthesia_la_LIBTOOLFLAGS = --tag=disable-static -EXTRA_DIST = README -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/synaesthesia/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu gst/synaesthesia/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ - } - -uninstall-pluginLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ - done - -clean-pluginLTLIBRARIES: - -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) - @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libgstsynaesthesia.la: $(libgstsynaesthesia_la_OBJECTS) $(libgstsynaesthesia_la_DEPENDENCIES) $(EXTRA_libgstsynaesthesia_la_DEPENDENCIES) - $(AM_V_CCLD)$(libgstsynaesthesia_la_LINK) -rpath $(plugindir) $(libgstsynaesthesia_la_OBJECTS) $(libgstsynaesthesia_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsynaesthesia_la-gstsynaesthesia.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsynaesthesia_la-synaescope.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -libgstsynaesthesia_la-gstsynaesthesia.lo: gstsynaesthesia.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsynaesthesia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsynaesthesia_la_CFLAGS) $(CFLAGS) -MT libgstsynaesthesia_la-gstsynaesthesia.lo -MD -MP -MF $(DEPDIR)/libgstsynaesthesia_la-gstsynaesthesia.Tpo -c -o libgstsynaesthesia_la-gstsynaesthesia.lo `test -f 'gstsynaesthesia.c' || echo '$(srcdir)/'`gstsynaesthesia.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsynaesthesia_la-gstsynaesthesia.Tpo $(DEPDIR)/libgstsynaesthesia_la-gstsynaesthesia.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstsynaesthesia.c' object='libgstsynaesthesia_la-gstsynaesthesia.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsynaesthesia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsynaesthesia_la_CFLAGS) $(CFLAGS) -c -o libgstsynaesthesia_la-gstsynaesthesia.lo `test -f 'gstsynaesthesia.c' || echo '$(srcdir)/'`gstsynaesthesia.c - -libgstsynaesthesia_la-synaescope.lo: synaescope.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsynaesthesia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsynaesthesia_la_CFLAGS) $(CFLAGS) -MT libgstsynaesthesia_la-synaescope.lo -MD -MP -MF $(DEPDIR)/libgstsynaesthesia_la-synaescope.Tpo -c -o libgstsynaesthesia_la-synaescope.lo `test -f 'synaescope.c' || echo '$(srcdir)/'`synaescope.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsynaesthesia_la-synaescope.Tpo $(DEPDIR)/libgstsynaesthesia_la-synaescope.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='synaescope.c' object='libgstsynaesthesia_la-synaescope.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsynaesthesia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsynaesthesia_la_CFLAGS) $(CFLAGS) -c -o libgstsynaesthesia_la-synaescope.lo `test -f 'synaescope.c' || echo '$(srcdir)/'`synaescope.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(plugindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-pluginLTLIBRARIES - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-pluginLTLIBRARIES - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-pluginLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-pluginLTLIBRARIES \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-pluginLTLIBRARIES - - -Android.mk: Makefile.am $(BUILT_SOURCES) - androgenizer \ - -:PROJECT libgstsynaesthesia -:SHARED libgstsynaesthesia \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libgstsynaesthesia_la_SOURCES) \ - -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsynaesthesia_la_CFLAGS) \ - -:LDFLAGS $(libgstsynaesthesia_la_LDFLAGS) \ - $(libgstsynaesthesia_la_LIBADD) \ - -ldl \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ - > $@ - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gst/synaesthesia/README b/gst/synaesthesia/README deleted file mode 100644 index 3932682..0000000 --- a/gst/synaesthesia/README +++ /dev/null @@ -1,151 +0,0 @@ -This is a visualization based on on synaesthesia. (see the synaesthesia -README below) - -This implementation is taken from alsaplayer: http://www.alsaplayer.org/ It -is based on synaesthesia version 1.3 (or maybe 1.4, I'm not entirely -certain), with some modifications by Richard Boulton to try and ensure that -something interesting is displayed for both very quiet and very loud music. - -Note: only one instance of this plugin may be created at a time: it has a -lot of static data. This should be fixed (and it shouldn't be hard to do -so, either). - ----------------------------------------------------------------------------- - -SYNAESTHESIA v2.0 - -Introduction -============ - -This is a program for representing sounds visually from a CD or line -input or piped from another program. It goes beyond the usual oscilliscope -style program by combining an FFT and stereo positioning information to -give a two dimensional display. Some of the shapes I have observed are: - * Drums: clouds of color, fairly high - * Clean guitar: several horizontal lines, low down - * Rough guitar: a cloud, low down - * Trumpet: Lots of horizontal lines everywhere - * Flute: A single horizontal line, low down - * Voice: A vertical line with some internal structure - * Synthesizer: All kinds of weird shapes! - -Synaesthesia can run in a window in X or full screen using SVGAlib. - -The display represents frequency as vertical position on screen, -left-right position as left-right position on screen. It can also -understand surround sound encoded music, and shows ambient noise -in orange. - -X-Windows support was added in version 1.3, as well as a major redesign -of the interface. You can use Synaesthesia as a fully functional -CD player, suitable for use while working. - -There is command line support for play lists and piping from another -program (such as an mp3 player). - -Usage -===== - -Synaesthesia should work on Linux and BSD systems. (Note: I don't -have access to a BSD system myself, I have to rely on patches -- if it -doesn't work, please tell me!) LinuxPPC users may have to use the pipe -mode rather than taking sound input from the CD player, as I believe -sound recording is not yet implemented. - -Compile Synaesthesia by typing - - make - -then install it by typing - - make install - -This will create three versions of Synaesthesia: - - synaesthesia - full screen SVGAlib version (Linux only) - xsynaesthesia - Version that runs as a window in X - sdlsynaesthesia - Version that uses the SDL graphics library - -If you want to use the SDL version, you need to get SDL from -http://www.devolution.com/~slouken/SDL. - -You will need to run Synaesthesia as root to run it full screen -with SVGAlib. Other varieties can be run by any user providing you -provide permissions on /dev/dsp, /dev/cdrom, and /dev/mixer. - -Synaesthesia creates a configuration file, named ~/.synaesthesia, -to store settings such as brightness, color, and window size, as -well as which devices to use to control sound input. - -BSD users will have to edit this file to set the CD-ROM device name -before using Synaesthesia in order to control the CD. - -Run Synaesthesia with no parameters for further information on how to -use it. - -Notes for code rippers -====================== - -This program contains code that you may wish to use in your own projects. -If you want to, please do. (For example, you might want to add some -snazzy visual effects to your favourite MP3 or CD player) - -The actual code to do the mapping from sound to visual display is -all in core.cpp, it should be fairly easy to disentangle from other -parts of the program. It does make reference to some globals defined -in syna.h, namely the #defines m (log2 of the sample size for each -frame) and brightness, data (which stores the sound input), outputBmp, -lastOutputBmp and lastLastOutputBmp (which hold the output), outWidth -and outHeight (size of the bitmaps), and fadeMode, brightnessTwiddler, -starSize and pointsAreDiamonds (various parameters affecting the display). - -The normal way to use it would be: - - Call coreInit() to set up some look-up tables - Call setStarSize(starSize) to set up some more look-up tables - Loop - Put data into the data array - Call fade() to apply the fade/wave/heat effect to the output - Call coreGo() to add the next fragment of sound input to the output - Display contents of outputBmp to screen - -There is a simple anti-aliased polygon drawing engine in the file -polygon.h. sound.cpp contains code for driving the CD. xlib.c and -xlibwrap.cpp contain code for setting up a window under X (originally -ripped from the Xaos fractal viewer program :-) ). - -Authors -======= - -This program is free. If you like it, or have any suggestions, please -send me (Paul Harrison) an email (pfh@yoyo.cc.monash.edu.au). - -Thanks to Asger Alstrup Nielsen for many great suggestions, and for -writing optimized 32 bit loops for fading and drawing to screen. - -Thanks to Roger Knobbe for porting Synaesthesia to FreeBSD. - -Thanks to Ben Gertzfield and Martin Mitchell for some small fixes to the -CD controlling code. - -Thanks to Simon Budig for an improvement to the X code. - -Changes -======= - -1.1 - Added surround sound decoding. -1.2 - Fixed a bug in the ioctl calls to /dev/dsp. -1.3 - Asger Alstrup Nielsen's optimizations added. - Added X-Windows support. - More options, redesigned interface. -1.4 - Bug fixes, including a great reduction in - "Sound: Recording overrun" warnings. - New command line options: play lists and piping. - Support for SDL. -2.0 - Bug fixes: Fixed problem in xlib.c that caused occasional segfaults, - several endianness problems fixed. - New effects: Wave, heat, diamond shaped points. - Piping sound now longer requires the twiddle factor. - Yet another interface redesign. - Partial support for LinuxPPC (pipe mode only) - diff --git a/gst/synaesthesia/gstsynaesthesia.c b/gst/synaesthesia/gstsynaesthesia.c deleted file mode 100644 index d31847f..0000000 --- a/gst/synaesthesia/gstsynaesthesia.c +++ /dev/null @@ -1,547 +0,0 @@ -/* GStreamer - * Copyright (C) <2001> Richard Boulton <richard@tartarus.org> - * - * gstsynaesthesia.c: implementation of synaesthesia drawing element - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ -/** - * SECTION:element-synaesthesia - * @see_also: goom - * - * Synaesthesia is an audio visualisation element. It creates glitter and - * pulsating fog based on the incomming audio signal. - * - * <refsect2> - * <title>Example launch line</title> - * |[ - * gst-launch -v audiotestsrc ! audioconvert ! synaesthesia ! ximagesink - * gst-launch -v audiotestsrc ! audioconvert ! synaesthesia ! ffmpegcolorspace ! xvimagesink - * ]| - * </refsect2> - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "gstsynaesthesia.h" - -static GstStaticPadTemplate gst_synaesthesia_src_template = -GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, -#if G_BYTE_ORDER == G_BIG_ENDIAN - GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB")) -#else - GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRx")) -#endif - ); - -static GstStaticPadTemplate gst_synaesthesia_sink_template = -GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw, " - "format = (string) " GST_AUDIO_NE (S16) ", " - "rate = (int) [ 8000, 96000 ], " - "channels = (int) 2, " - "channel-mask = (bitmask) 0x3, " "layout = (string) interleaved") - ); - -static void gst_synaesthesia_finalize (GObject * object); -static void gst_synaesthesia_dispose (GObject * object); - -static GstFlowReturn gst_synaesthesia_chain (GstPad * pad, GstObject * parent, - GstBuffer * buffer); -static gboolean gst_synaesthesia_sink_event (GstPad * pad, GstObject * parent, - GstEvent * event); - -static GstStateChangeReturn -gst_synaesthesia_change_state (GstElement * element, GstStateChange transition); - -static gboolean gst_synaesthesia_src_negotiate (GstSynaesthesia * synaesthesia); -static gboolean gst_synaesthesia_src_setcaps (GstSynaesthesia * synaesthesia, - GstCaps * caps); -static gboolean gst_synaesthesia_sink_setcaps (GstSynaesthesia * synaesthesia, - GstCaps * caps); - -#define gst_synaesthesia_parent_class parent_class -G_DEFINE_TYPE (GstSynaesthesia, gst_synaesthesia, GST_TYPE_ELEMENT); - -static void -gst_synaesthesia_class_init (GstSynaesthesiaClass * klass) -{ - GObjectClass *gobject_class; - GstElementClass *gstelement_class; - - gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; - - parent_class = g_type_class_peek_parent (klass); - - gobject_class->dispose = gst_synaesthesia_dispose; - gobject_class->finalize = gst_synaesthesia_finalize; - - gstelement_class->change_state = - GST_DEBUG_FUNCPTR (gst_synaesthesia_change_state); - - gst_element_class_set_static_metadata (gstelement_class, "Synaesthesia", - "Visualization", - "Creates video visualizations of audio input, using stereo and pitch information", - "Richard Boulton <richard@tartarus.org>"); - - gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&gst_synaesthesia_src_template)); - gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&gst_synaesthesia_sink_template)); - - synaesthesia_init (); -} - -static void -gst_synaesthesia_init (GstSynaesthesia * synaesthesia) -{ - /* create the sink and src pads */ - synaesthesia->sinkpad = - gst_pad_new_from_static_template (&gst_synaesthesia_sink_template, - "sink"); - gst_pad_set_chain_function (synaesthesia->sinkpad, - GST_DEBUG_FUNCPTR (gst_synaesthesia_chain)); - gst_pad_set_event_function (synaesthesia->sinkpad, - GST_DEBUG_FUNCPTR (gst_synaesthesia_sink_event)); - gst_element_add_pad (GST_ELEMENT (synaesthesia), synaesthesia->sinkpad); - - synaesthesia->srcpad = - gst_pad_new_from_static_template (&gst_synaesthesia_src_template, "src"); - gst_element_add_pad (GST_ELEMENT (synaesthesia), synaesthesia->srcpad); - - synaesthesia->adapter = gst_adapter_new (); - - /* reset the initial video state */ - synaesthesia->width = 320; - synaesthesia->height = 200; - synaesthesia->fps_n = 25; /* desired frame rate */ - synaesthesia->fps_d = 1; - synaesthesia->frame_duration = -1; - - /* reset the initial audio state */ - synaesthesia->rate = GST_AUDIO_DEF_RATE; - synaesthesia->channels = 2; - - synaesthesia->next_ts = GST_CLOCK_TIME_NONE; - - synaesthesia->si = - synaesthesia_new (synaesthesia->width, synaesthesia->height); -} - -static void -gst_synaesthesia_dispose (GObject * object) -{ - GstSynaesthesia *synaesthesia; - - synaesthesia = GST_SYNAESTHESIA (object); - - if (synaesthesia->adapter) { - g_object_unref (synaesthesia->adapter); - synaesthesia->adapter = NULL; - } - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -gst_synaesthesia_finalize (GObject * object) -{ - GstSynaesthesia *synaesthesia; - - synaesthesia = GST_SYNAESTHESIA (object); - - synaesthesia_close (synaesthesia->si); - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static gboolean -gst_synaesthesia_sink_setcaps (GstSynaesthesia * synaesthesia, GstCaps * caps) -{ - GstStructure *structure; - gint channels; - gint rate; - gboolean res = TRUE; - - structure = gst_caps_get_structure (caps, 0); - - if (!gst_structure_get_int (structure, "channels", &channels) || - !gst_structure_get_int (structure, "rate", &rate)) - goto missing_caps_details; - - if (channels != 2) - goto wrong_channels; - - if (rate <= 0) - goto wrong_rate; - - synaesthesia->channels = channels; - synaesthesia->rate = rate; - -done: - return res; - - /* Errors */ -missing_caps_details: - { - GST_WARNING_OBJECT (synaesthesia, "missing channels or rate in the caps"); - res = FALSE; - goto done; - } -wrong_channels: - { - GST_WARNING_OBJECT (synaesthesia, "number of channels must be 2, but is %d", - channels); - res = FALSE; - goto done; - } -wrong_rate: - { - GST_WARNING_OBJECT (synaesthesia, "sample rate must be >0, but is %d", - rate); - res = FALSE; - goto done; - } -} - -static gboolean -gst_synaesthesia_src_negotiate (GstSynaesthesia * synaesthesia) -{ - GstCaps *othercaps, *target, *intersect; - GstStructure *structure; - GstCaps *templ; - GstQuery *query; - GstBufferPool *pool = NULL; - guint size, min, max; - - templ = gst_pad_get_pad_template_caps (synaesthesia->srcpad); - - GST_DEBUG_OBJECT (synaesthesia, "performing negotiation"); - - /* see what the peer can do */ - othercaps = gst_pad_peer_query_caps (synaesthesia->srcpad, NULL); - if (othercaps) { - intersect = gst_caps_intersect (othercaps, templ); - gst_caps_unref (othercaps); - gst_caps_unref (templ); - - if (gst_caps_is_empty (intersect)) - goto no_format; - - target = gst_caps_copy_nth (intersect, 0); - gst_caps_unref (intersect); - } else { - target = templ; - } - - structure = gst_caps_get_structure (target, 0); - gst_structure_fixate_field_nearest_int (structure, "width", - synaesthesia->width); - gst_structure_fixate_field_nearest_int (structure, "height", - synaesthesia->height); - gst_structure_fixate_field_nearest_fraction (structure, "framerate", - synaesthesia->fps_n, synaesthesia->fps_d); - - GST_DEBUG_OBJECT (synaesthesia, "final caps are %" GST_PTR_FORMAT, target); - - gst_synaesthesia_src_setcaps (synaesthesia, target); - - /* try to get a bufferpool now */ - /* find a pool for the negotiated caps now */ - query = gst_query_new_allocation (target, TRUE); - - if (gst_pad_peer_query (synaesthesia->srcpad, query) && - gst_query_get_n_allocation_pools (query) > 0) { - /* we got configuration from our peer, parse them */ - gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max); - } else { - size = synaesthesia->outsize; - min = max = 0; - } - - if (pool == NULL) { - GstStructure *config; - - /* we did not get a pool, make one ourselves then */ - pool = gst_buffer_pool_new (); - - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (config, target, size, min, max); - gst_buffer_pool_set_config (pool, config); - } - - if (synaesthesia->pool) - gst_object_unref (synaesthesia->pool); - synaesthesia->pool = pool; - - /* and activate */ - gst_buffer_pool_set_active (pool, TRUE); - - gst_caps_unref (target); - - return TRUE; - -no_format: - { - gst_caps_unref (intersect); - return FALSE; - } -} - -static gboolean -gst_synaesthesia_src_setcaps (GstSynaesthesia * synaesthesia, GstCaps * caps) -{ - GstStructure *structure; - gint w, h; - gint num, denom; - gboolean res = TRUE; - - structure = gst_caps_get_structure (caps, 0); - - if (!gst_structure_get_int (structure, "width", &w) || - !gst_structure_get_int (structure, "height", &h) || - !gst_structure_get_fraction (structure, "framerate", &num, &denom)) { - goto missing_caps_details; - } - - synaesthesia->width = w; - synaesthesia->height = h; - synaesthesia->fps_n = num; - synaesthesia->fps_d = denom; - - synaesthesia_resize (synaesthesia->si, synaesthesia->width, - synaesthesia->height); - - /* size of the output buffer in bytes, depth is always 4 bytes */ - synaesthesia->outsize = synaesthesia->width * synaesthesia->height * 4; - synaesthesia->frame_duration = gst_util_uint64_scale_int (GST_SECOND, - synaesthesia->fps_d, synaesthesia->fps_n); - synaesthesia->spf = gst_util_uint64_scale_int (synaesthesia->rate, - synaesthesia->fps_d, synaesthesia->fps_n); - - GST_DEBUG_OBJECT (synaesthesia, "dimension %dx%d, framerate %d/%d, spf %d", - synaesthesia->width, synaesthesia->height, - synaesthesia->fps_n, synaesthesia->fps_d, synaesthesia->spf); - - res = gst_pad_push_event (synaesthesia->srcpad, gst_event_new_caps (caps)); - -done: - return res; - - /* Errors */ -missing_caps_details: - { - GST_WARNING_OBJECT (synaesthesia, - "missing width, height or framerate in the caps"); - res = FALSE; - goto done; - } -} - -/* make sure we are negotiated */ -static GstFlowReturn -ensure_negotiated (GstSynaesthesia * synaesthesia) -{ - gboolean reconfigure; - - reconfigure = gst_pad_check_reconfigure (synaesthesia->srcpad); - - /* we don't know an output format yet, pick one */ - if (reconfigure || !gst_pad_has_current_caps (synaesthesia->srcpad)) { - if (!gst_synaesthesia_src_negotiate (synaesthesia)) - return GST_FLOW_NOT_NEGOTIATED; - } - return GST_FLOW_OK; -} - -static GstFlowReturn -gst_synaesthesia_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) -{ - GstFlowReturn ret = GST_FLOW_OK; - GstSynaesthesia *synaesthesia; - guint32 avail, bytesperread; - - synaesthesia = GST_SYNAESTHESIA (parent); - - GST_LOG_OBJECT (synaesthesia, "chainfunc called"); - - if (synaesthesia->rate == 0) { - gst_buffer_unref (buffer); - ret = GST_FLOW_NOT_NEGOTIATED; - goto exit; - } - - /* Make sure have an output format */ - ret = ensure_negotiated (synaesthesia); - if (ret != GST_FLOW_OK) { - gst_buffer_unref (buffer); - goto exit; - } - - /* resync on DISCONT */ - if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) { - synaesthesia->next_ts = GST_CLOCK_TIME_NONE; - gst_adapter_clear (synaesthesia->adapter); - } - - /* Match timestamps from the incoming audio */ - if (GST_BUFFER_TIMESTAMP (buffer) != GST_CLOCK_TIME_NONE) - synaesthesia->next_ts = GST_BUFFER_TIMESTAMP (buffer); - - gst_adapter_push (synaesthesia->adapter, buffer); - - /* this is what we want */ - bytesperread = - MAX (FFT_BUFFER_SIZE, - synaesthesia->spf) * synaesthesia->channels * sizeof (gint16); - - /* this is what we have */ - avail = gst_adapter_available (synaesthesia->adapter); - while (avail > bytesperread) { - const guint16 *data = - (const guint16 *) gst_adapter_map (synaesthesia->adapter, - bytesperread); - GstBuffer *outbuf = NULL; - guchar *out_frame; - guint i; - - /* deinterleave */ - for (i = 0; i < FFT_BUFFER_SIZE; i++) { - synaesthesia->datain[0][i] = *data++; - synaesthesia->datain[1][i] = *data++; - } - - /* alloc a buffer */ - GST_DEBUG_OBJECT (synaesthesia, "allocating output buffer"); - ret = gst_buffer_pool_acquire_buffer (synaesthesia->pool, &outbuf, NULL); - if (ret != GST_FLOW_OK) { - gst_adapter_unmap (synaesthesia->adapter); - goto exit; - } - - GST_BUFFER_TIMESTAMP (outbuf) = synaesthesia->next_ts; - GST_BUFFER_DURATION (outbuf) = synaesthesia->frame_duration; - - out_frame = (guchar *) - synaesthesia_update (synaesthesia->si, synaesthesia->datain); - gst_buffer_fill (outbuf, 0, out_frame, synaesthesia->outsize); - - gst_adapter_unmap (synaesthesia->adapter); - - ret = gst_pad_push (synaesthesia->srcpad, outbuf); - outbuf = NULL; - - if (ret != GST_FLOW_OK) - break; - - if (synaesthesia->next_ts != GST_CLOCK_TIME_NONE) - synaesthesia->next_ts += synaesthesia->frame_duration; - - /* flush sampled for one frame */ - gst_adapter_flush (synaesthesia->adapter, synaesthesia->spf * - synaesthesia->channels * sizeof (gint16)); - - avail = gst_adapter_available (synaesthesia->adapter); - } - -exit: - return ret; -} - -static gboolean -gst_synaesthesia_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) -{ - gboolean res; - GstSynaesthesia *synaesthesia; - - synaesthesia = GST_SYNAESTHESIA (parent); - - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_CAPS: - { - GstCaps *caps; - - gst_event_parse_caps (event, &caps); - res = gst_synaesthesia_sink_setcaps (synaesthesia, caps); - gst_event_unref (event); - break; - } - default: - res = gst_pad_push_event (synaesthesia->srcpad, event); - break; - } - - return res; -} - -static GstStateChangeReturn -gst_synaesthesia_change_state (GstElement * element, GstStateChange transition) -{ - GstSynaesthesia *synaesthesia; - GstStateChangeReturn ret; - - synaesthesia = GST_SYNAESTHESIA (element); - - switch (transition) { - case GST_STATE_CHANGE_READY_TO_PAUSED: - synaesthesia->next_ts = GST_CLOCK_TIME_NONE; - gst_adapter_clear (synaesthesia->adapter); - synaesthesia->channels = synaesthesia->rate = 0; - break; - default: - break; - } - - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - - switch (transition) { - case GST_STATE_CHANGE_PAUSED_TO_READY: - if (synaesthesia->pool) { - gst_buffer_pool_set_active (synaesthesia->pool, FALSE); - gst_object_replace ((GstObject **) & synaesthesia->pool, NULL); - } - break; - case GST_STATE_CHANGE_READY_TO_NULL: - break; - default: - break; - } - - return ret; -} - - -static gboolean -plugin_init (GstPlugin * plugin) -{ - GST_DEBUG_CATEGORY_INIT (synaesthesia_debug, "synaesthesia", 0, - "synaesthesia audio visualisations"); - - return gst_element_register (plugin, "synaesthesia", GST_RANK_NONE, - GST_TYPE_SYNAESTHESIA); -} - -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, - GST_VERSION_MINOR, - synaesthesia, - "Creates video visualizations of audio input, using stereo and pitch information", - plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/gst/synaesthesia/gstsynaesthesia.h b/gst/synaesthesia/gstsynaesthesia.h deleted file mode 100644 index 598ebb3..0000000 --- a/gst/synaesthesia/gstsynaesthesia.h +++ /dev/null @@ -1,82 +0,0 @@ -/* GStreamer - * Copyright (C) <2001> Richard Boulton <richard@tartarus.org> - * - * gstsynaesthesia.c: implementation of synaesthesia drawing element - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_SYNAESTHESIA_H__ -#define __GST_SYNAESTHESIA_H__ - -#include <string.h> -#include <gst/gst.h> -#include <gst/video/video.h> -#include <gst/audio/audio.h> -#include <gst/base/gstadapter.h> -#include "synaescope.h" - -G_BEGIN_DECLS -#define GST_TYPE_SYNAESTHESIA (gst_synaesthesia_get_type()) -#define GST_SYNAESTHESIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SYNAESTHESIA,GstSynaesthesia)) -#define GST_SYNAESTHESIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SYNAESTHESIA,GstSynaesthesiaClass)) -#define GST_IS_SYNAESTHESIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SYNAESTHESIA)) -#define GST_IS_SYNAESTHESIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SYNAESTHESIA)) -typedef struct _GstSynaesthesia GstSynaesthesia; -typedef struct _GstSynaesthesiaClass GstSynaesthesiaClass; - -GST_DEBUG_CATEGORY_STATIC (synaesthesia_debug); -#define GST_CAT_DEFAULT (synaesthesia_debug) - -struct _GstSynaesthesia -{ - GstElement element; - - /* pads */ - GstPad *sinkpad, *srcpad; - GstAdapter *adapter; - - guint64 next_ts; /* the timestamp of the next frame */ - guint64 frame_duration; - guint bps; /* bytes per sample */ - guint spf; /* samples per video frame */ - - gint16 datain[2][FFT_BUFFER_SIZE]; - - /* video state */ - gint fps_n, fps_d; - gint width; - gint height; - guint outsize; - GstBufferPool *pool; - - /* Audio state */ - gint sample_rate; - gint rate; - gint channels; - - /* Synaesthesia instance */ - syn_instance *si; -}; - -struct _GstSynaesthesiaClass -{ - GstElementClass parent_class; -}; - -GType gst_synaesthesia_get_type (void); - -G_END_DECLS -#endif /* __GST_SYNAESTHESIA_H__ */ diff --git a/gst/synaesthesia/synaescope.c b/gst/synaesthesia/synaescope.c deleted file mode 100644 index 92abd39..0000000 --- a/gst/synaesthesia/synaescope.c +++ /dev/null @@ -1,460 +0,0 @@ -/* synaescope.cpp - * Copyright (C) 1999,2002 Richard Boulton <richard@tartarus.org> - * - * Much code copied from Synaesthesia - a program to display sound - * graphically, by Paul Francis Harrison <pfh@yoyo.cc.monash.edu.au> - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "synaescope.h" - -#include <pthread.h> -#include <dirent.h> -#include <sys/stat.h> -#ifndef _MSC_VER -#include <sys/time.h> -#include <time.h> -#endif -#include <math.h> -#include <stdio.h> -#include <stdlib.h> -#ifndef _MSC_VER -#include <unistd.h> -#endif -#include <string.h> -#include <assert.h> - -#ifdef G_OS_WIN32 -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#endif - -#define SCOPE_BG_RED 0 -#define SCOPE_BG_GREEN 0 -#define SCOPE_BG_BLUE 0 - -#define brightMin 200 -#define brightMax 2000 -#define brightDec 10 -#define brightInc 6 -#define brTotTargetLow 5000 -#define brTotTargetHigh 15000 - -#define BOUND(x) ((x) > 255 ? 255 : (x)) -#define PEAKIFY(x) BOUND((x) - (x)*(255-(x))/255/2) - -/* Instance data */ -struct syn_instance -{ - /* options */ - unsigned int resx, resy; - int autobrightness; /* Whether to use automatic brightness adjust */ - unsigned int brightFactor; - - /* data */ - unsigned char *output; - guint32 *display; - gint16 pcmt_l[FFT_BUFFER_SIZE]; - gint16 pcmt_r[FFT_BUFFER_SIZE]; - gint16 pcm_l[FFT_BUFFER_SIZE]; - gint16 pcm_r[FFT_BUFFER_SIZE]; - double fftout_l[FFT_BUFFER_SIZE]; - double fftout_r[FFT_BUFFER_SIZE]; - double corr_l[FFT_BUFFER_SIZE]; - double corr_r[FFT_BUFFER_SIZE]; - int clarity[FFT_BUFFER_SIZE]; /* Surround sound */ - - /* pre calculated values */ - int heightFactor; - int heightAdd; - double brightFactor2; -}; - -/* Shared lookup tables for the FFT */ -static double fftmult[FFT_BUFFER_SIZE / 2 + 1]; -static double cosTable[FFT_BUFFER_SIZE]; -static double negSinTable[FFT_BUFFER_SIZE]; -static int bitReverse[FFT_BUFFER_SIZE]; -/* Shared lookup tables for colors */ -static int scaleDown[256]; -static guint32 colEq[256]; - -static void synaes_fft (double *x, double *y); -static void synaescope_coreGo (syn_instance * si); - -static inline void -addPixel (syn_instance * si, int x, int y, int br1, int br2) -{ - unsigned char *p; - - if (G_UNLIKELY (x < 0 || x >= si->resx || y < 0 || y >= si->resy)) - return; - - p = si->output + x * 2 + y * si->resx * 2; - if (p[0] < 255 - br1) - p[0] += br1; - else - p[0] = 255; - if (p[1] < 255 - br2) - p[1] += br2; - else - p[1] = 255; -} - -static inline void -addPixelFast (unsigned char *p, int br1, int br2) -{ - if (p[0] < 255 - br1) - p[0] += br1; - else - p[0] = 255; - if (p[1] < 255 - br2) - p[1] += br2; - else - p[1] = 255; -} - -static void -synaescope_coreGo (syn_instance * si) -{ - int i, j; - register guint32 *ptr; - register guint32 *end; - long int brtot = 0; - - memcpy (si->pcm_l, si->pcmt_l, sizeof (si->pcm_l)); - memcpy (si->pcm_r, si->pcmt_r, sizeof (si->pcm_r)); - - for (i = 0; i < FFT_BUFFER_SIZE; i++) { - si->fftout_l[i] = si->pcm_l[i]; - si->fftout_r[i] = si->pcm_r[i]; - } - - synaes_fft (si->fftout_l, si->fftout_r); - - for (i = 0 + 1; i < FFT_BUFFER_SIZE; i++) { - double x1 = si->fftout_l[bitReverse[i]]; - double y1 = si->fftout_r[bitReverse[i]]; - double x2 = si->fftout_l[bitReverse[FFT_BUFFER_SIZE - i]]; - double y2 = si->fftout_r[bitReverse[FFT_BUFFER_SIZE - i]]; - double aa, bb; - - si->corr_l[i] = sqrt (aa = (x1 + x2) * (x1 + x2) + (y1 - y2) * (y1 - y2)); - si->corr_r[i] = sqrt (bb = (x1 - x2) * (x1 - x2) + (y1 + y2) * (y1 + y2)); - si->clarity[i] = (int) ( - ((x1 + x2) * (x1 - x2) + (y1 + y2) * (y1 - y2)) / (aa + bb) * 256); - } - - /* Asger Alstrupt's optimized 32 bit fade */ - /* (alstrup@diku.dk) */ - ptr = (guint32 *) si->output; - end = (guint32 *) (si->output + si->resx * si->resy * 2); - do { - /*Bytewize version was: *(ptr++) -= *ptr+(*ptr>>1)>>4; */ - if (*ptr) { - if (*ptr & 0xf0f0f0f0) { - *ptr = *ptr - ((*ptr & 0xf0f0f0f0) >> 4) - ((*ptr & 0xe0e0e0e0) >> 5); - } else { - *ptr = (*ptr * 14 >> 4) & 0x0f0f0f0f; - /*Should be 29/32 to be consistent. Who cares. This is totally */ - /* hacked anyway. */ - /*unsigned char *subptr = (unsigned char*)(ptr++); */ - /*subptr[0] = (int)subptr[0] * 29 / 32; */ - /*subptr[1] = (int)subptr[0] * 29 / 32; */ - /*subptr[2] = (int)subptr[0] * 29 / 32; */ - /*subptr[3] = (int)subptr[0] * 29 / 32; */ - } - } - ptr++; - } while (ptr < end); - - for (i = 1; i < FFT_BUFFER_SIZE / 2; i++) { - if (si->corr_l[i] > 0 || si->corr_r[i] > 0) { - int br1, br2; - double fc = si->corr_l[i] + si->corr_r[i]; - int br = (int) (fc * i * si->brightFactor2); - int px = (int) (si->corr_r[i] * si->resx / fc); - int py = si->heightAdd - i / si->heightFactor; - - brtot += br; - br1 = br * (si->clarity[i] + 128) >> 8; - br2 = br * (128 - si->clarity[i]) >> 8; - br1 = CLAMP (br1, 0, 255); - br2 = CLAMP (br2, 0, 255); - - /* if we are close to a border */ - if (px < 30 || py < 30 || px > si->resx - 30 || py > si->resy - 30) { - /* draw a spark */ - addPixel (si, px, py, br1, br2); - for (j = 1; br1 > 0 || br2 > 0; - j++, br1 = scaleDown[br1], br2 = scaleDown[br2]) { - addPixel (si, px + j, py, br1, br2); - addPixel (si, px, py + j, br1, br2); - addPixel (si, px - j, py, br1, br2); - addPixel (si, px, py - j, br1, br2); - } - } else { - unsigned char *p = si->output + px * 2 + py * si->resx * 2; - unsigned char *p1 = p, *p2 = p, *p3 = p, *p4 = p; - /* draw a spark */ - addPixelFast (p, br1, br2); - for (; br1 > 0 || br2 > 0; br1 = scaleDown[br1], br2 = scaleDown[br2]) { - p1 += 2; - addPixelFast (p1, br1, br2); - p2 -= 2; - addPixelFast (p2, br1, br2); - p3 += si->resx * 2; - addPixelFast (p3, br1, br2); - p4 -= si->resx * 2; - addPixelFast (p4, br1, br2); - } - } - } - } - - /* Apply autoscaling: makes quiet bits brighter, and loud bits - * darker, but still keeps loud bits brighter than quiet bits. */ - if (brtot != 0 && si->autobrightness) { - long int brTotTarget = brTotTargetHigh; - - if (brightMax != brightMin) { - brTotTarget -= ((brTotTargetHigh - brTotTargetLow) * - (si->brightFactor - brightMin)) / (brightMax - brightMin); - } - if (brtot < brTotTarget) { - si->brightFactor += brightInc; - if (si->brightFactor > brightMax) - si->brightFactor = brightMax; - } else { - si->brightFactor -= brightDec; - if (si->brightFactor < brightMin) - si->brightFactor = brightMin; - } - /* printf("brtot: %ld\tbrightFactor: %d\tbrTotTarget: %d\n", - brtot, brightFactor, brTotTarget); */ - } -} - - -static void -synaescope32 (syn_instance * si) -{ - unsigned char *outptr; - int i; - - synaescope_coreGo (si); - - outptr = si->output; - for (i = 0; i < si->resx * si->resy; i++) { - si->display[i] = colEq[(outptr[0] >> 4) + (outptr[1] & 0xf0)]; - outptr += 2; - } -} - - -static int -bitReverser (int i) -{ - int sum = 0; - int j; - - for (j = 0; j < FFT_BUFFER_SIZE_LOG; j++) { - sum = (i & 1) + sum * 2; - i >>= 1; - } - - return sum; -} - -static void -synaes_fft (double *x, double *y) -{ - int n2 = FFT_BUFFER_SIZE; - int n1; - int twoToTheK; - int j; - - for (twoToTheK = 1; twoToTheK < FFT_BUFFER_SIZE; twoToTheK *= 2) { - n1 = n2; - n2 /= 2; - for (j = 0; j < n2; j++) { - double c = cosTable[j * twoToTheK & (FFT_BUFFER_SIZE - 1)]; - double s = negSinTable[j * twoToTheK & (FFT_BUFFER_SIZE - 1)]; - int i; - - for (i = j; i < FFT_BUFFER_SIZE; i += n1) { - int l = i + n2; - double xt = x[i] - x[l]; - double yt = y[i] - y[l]; - - x[i] = (x[i] + x[l]); - y[i] = (y[i] + y[l]); - x[l] = xt * c - yt * s; - y[l] = xt * s + yt * c; - } - } - } -} - -static void -synaescope_set_data (syn_instance * si, gint16 data[2][FFT_BUFFER_SIZE]) -{ - int i; - gint16 *newset_l = si->pcmt_l; - gint16 *newset_r = si->pcmt_r; - - for (i = 0; i < FFT_BUFFER_SIZE; i++) { - newset_l[i] = data[0][i]; - newset_r[i] = data[1][i]; - } -} - - -guint32 * -synaesthesia_update (syn_instance * si, gint16 data[2][FFT_BUFFER_SIZE]) -{ - synaescope_set_data (si, data); - synaescope32 (si); - return si->display; -} - -void -synaesthesia_init (void) -{ - static int inited = 0; - int i; - - if (inited) - return; - - for (i = 0; i <= FFT_BUFFER_SIZE / 2 + 1; i++) { - double mult = (double) 128 / ((FFT_BUFFER_SIZE * 16384) ^ 2); - - /* Result now guaranteed (well, almost) to be in range 0..128 */ - - /* Low values represent more frequencies, and thus get more */ - /* intensity - this helps correct for that. */ - mult *= log (i + 1) / log (2); - - mult *= 3; /* Adhoc parameter, looks about right for me. */ - - fftmult[i] = mult; - } - - for (i = 0; i < FFT_BUFFER_SIZE; i++) { - negSinTable[i] = -sin (M_PI * 2 / FFT_BUFFER_SIZE * i); - cosTable[i] = cos (M_PI * 2 / FFT_BUFFER_SIZE * i); - bitReverse[i] = bitReverser (i); - } - - for (i = 0; i < 256; i++) - scaleDown[i] = i * 200 >> 8; - - for (i = 0; i < 256; i++) { - int red = PEAKIFY ((i & 15 * 16)); - int green = PEAKIFY ((i & 15) * 16 + (i & 15 * 16) / 4); - int blue = PEAKIFY ((i & 15) * 16); - - colEq[i] = (red << 16) + (green << 8) + blue; - } - - inited = 1; -} - -gboolean -synaesthesia_resize (syn_instance * si, guint resx, guint resy) -{ - unsigned char *output = NULL; - guint32 *display = NULL; - double actualHeight; - - /* FIXME: FFT_BUFFER_SIZE is reated to resy, right now we get black borders on - * top and below - */ - - output = g_try_new (unsigned char, 2 * resx * resy); - display = g_try_new (guint32, resx * resy); - if (!output || !display) - goto Error; - - g_free (si->output); - g_free (si->display); - - si->resx = resx; - si->resy = resy; - si->output = output; - si->display = display; - - /* factors for height scaling - * the bigger FFT_BUFFER_SIZE, the more finegrained steps we have - * should we report the real hight, so that xvimagesink can scale? - */ - // 512 values , resy=256 -> highFc=2 - si->heightFactor = FFT_BUFFER_SIZE / 2 / si->resy + 1; - actualHeight = FFT_BUFFER_SIZE / 2 / si->heightFactor; - si->heightAdd = (si->resy + actualHeight) / 2; - - /*printf ("resy=%u, heightFactor=%d, heightAdd=%d, actualHeight=%d\n", - si->resy, si->heightFactor, si->heightAdd, actualHeight); - */ - - /* Correct for window size */ - si->brightFactor2 = (si->brightFactor / 65536.0 / FFT_BUFFER_SIZE) * - sqrt (actualHeight * si->resx / (320.0 * 200.0)); - - return TRUE; - -Error: - g_free (output); - g_free (display); - return FALSE; -} - -syn_instance * -synaesthesia_new (guint resx, guint resy) -{ - syn_instance *si; - - si = g_try_new0 (syn_instance, 1); - if (si == NULL) - return NULL; - - if (!synaesthesia_resize (si, resx, resy)) { - g_free (si); - return NULL; - } - - si->autobrightness = 1; /* Whether to use automatic brightness adjust */ - si->brightFactor = 400; - - return si; -} - -void -synaesthesia_close (syn_instance * si) -{ - g_return_if_fail (si != NULL); - - g_free (si->output); - g_free (si->display); - - g_free (si); -} diff --git a/gst/synaesthesia/synaescope.h b/gst/synaesthesia/synaescope.h deleted file mode 100644 index fe41a9a..0000000 --- a/gst/synaesthesia/synaescope.h +++ /dev/null @@ -1,42 +0,0 @@ -/* synaescope.h - * Copyright (C) 1999,2002 Richard Boulton <richard@tartarus.org> - * - * Much code copied from Synaesthesia - a program to display sound - * graphically, by Paul Francis Harrison <pfh@yoyo.cc.monash.edu.au> - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ -#ifndef _SYNAESCOPE_H -#define _SYNAESCOPE_H - -#include <glib.h> - -/* FIXME: we should set this automatically based on resy - * see synaescope.c::synaesthesia_resize() - */ -#define FFT_BUFFER_SIZE_LOG 10 -#define FFT_BUFFER_SIZE (1 << FFT_BUFFER_SIZE_LOG) - -typedef struct syn_instance syn_instance; - -void synaesthesia_init (void); -syn_instance *synaesthesia_new (guint resx, guint resy); -void synaesthesia_close (syn_instance * si); - -gboolean synaesthesia_resize (syn_instance * si, guint resx, guint resy); -guint32 *synaesthesia_update (syn_instance * si, - gint16 data[2][FFT_BUFFER_SIZE]); - -#endif diff --git a/gst/xingmux/Makefile.in b/gst/xingmux/Makefile.in index c19e171..d6bd8e6 100644 --- a/gst/xingmux/Makefile.in +++ b/gst/xingmux/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, @@ -235,7 +235,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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@ @@ -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 1f3bcb1..d0fdd54 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, @@ -167,7 +167,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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 @@ freebsd* | dragonfly*) 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 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # 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 @@ freebsd* | dragonfly*) fi ;; -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - haiku*) lt_cv_deplibs_check_method=pass_all ;; @@ -3297,7 +3282,7 @@ irix5* | irix6* | nonstopux*) ;; # 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 @@ m4_if([$1], [CXX], [ ;; 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 @@ m4_if([$1], [CXX], [ _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 @@ if test "$_lt_caught_CXX_error" != yes; then _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 @@ if test "$_lt_caught_CXX_error" != yes; then _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 7a9c1b7..cabe3e7 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, @@ -168,7 +168,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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@ Binary files differ@@ -7,7 +7,7 @@ msgid "" 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:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" Binary files differ@@ -7,7 +7,7 @@ msgid "" 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:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-26 22:34+0300\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" Binary files differ@@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" Binary files differ@@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.10.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-03-16 03:46+0100\n" "Last-Translator: Petr Kovar <pknbe@volny.cz>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" Binary files differ@@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-28 03:56+0100\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" Binary files differ@@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-28 00:04+0200\n" "Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2012-03-18 01:04+0100\n" "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n" "Language-Team: Greek <team@lists.gnome.gr>\n" diff --git a/po/en_GB.gmo b/po/en_GB.gmo Binary files differindex 0ad6c40..0a58d34 100644 --- a/po/en_GB.gmo +++ b/po/en_GB.gmo diff --git a/po/en_GB.po b/po/en_GB.po index 26a0bf0..514653b 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -6,7 +6,7 @@ msgid "" 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:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-06-04 22:24+0200\n" "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-10-02 15:45+0200\n" "Last-Translator: Jorge González González <aloriel@gmail.com>\n" "Language-Team: Spanish <es@li.org>\n" Binary files differ@@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2010-03-07 13:12+0200\n" "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n" "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n" Binary files differ@@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.10.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-03-10 20:41+0200\n" "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-28 09:25+0200\n" "Last-Translator: Claude Paroz <claude@2xlibre.net>\n" "Language-Team: French <traduc@traduc.org>\n" Binary files differ@@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2012-02-24 12:48+0100\n" "Last-Translator: Francisco Diéguez <frandieguez@ubuntu.com>\n" "Language-Team: Galician <proxecto@trasno.net>\n" diff --git a/po/gst-plugins-ugly-1.0.pot b/po/gst-plugins-ugly-1.0.pot index fcfa68d..2eb4475 100644 --- a/po/gst-plugins-ugly-1.0.pot +++ b/po/gst-plugins-ugly-1.0.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-ugly 0.11.92\n" +"Project-Id-Version: gst-plugins-ugly 0.11.93\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" @@ -80,6 +80,6 @@ msgstr "" msgid "This stream contains no data." msgstr "" -#: gst/asfdemux/gstasfdemux.c:410 gst/asfdemux/gstasfdemux.c:1750 +#: gst/asfdemux/gstasfdemux.c:410 gst/asfdemux/gstasfdemux.c:1771 msgid "Internal data stream error." msgstr "" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.10.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-04-20 01:48+0200\n" "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2012-01-28 11:39+0700\n" "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n" "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.11.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-06-14 12:31+0200\n" "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n" "Language-Team: Italian <tp@lists.linux.it>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-26 19:42+0900\n" "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n" "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.7.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2008-05-14 02:52+0300\n" "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n" "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-09-02 12:04-0000\n" "Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n" "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.11.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-07-16 15:07+0800\n" "Last-Translator: Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>\n" "Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n" Binary files differ@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.9.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2008-11-13 18:18+0100\n" "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n" "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.6\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2007-11-02 14:39+0100\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-23 23:55+0200\n" "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" 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:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-26 18:00+0200\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 Binary files differindex 043a5dc..da523a7 100644 --- a/po/pt_BR.gmo +++ b/po/pt_BR.gmo diff --git a/po/pt_BR.po b/po/pt_BR.po index 6ffe87f..f2c622b 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.14.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2010-05-14 23:53-0300\n" "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n" Binary files differ@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.14.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2010-08-16 03:32+0300\n" "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-26 20:28+0400\n" "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" "Language-Team: Russian <gnu@mx.ru>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.11.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-09-21 10:26+0100\n" "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-26 15:35+0100\n" "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n" "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" 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:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+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" Binary files differ@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-12-04 13:43+0200\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <gnu@prevod.org>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.10.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2009-03-10 16:12+0100\n" "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" Binary files differ@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly-0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-26 19:24+0200\n" "Last-Translator: Server Acim <serveracim@gmail.com>\n" "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-04-30 16:27+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2010-03-06 22:13+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 Binary files differindex 444dc8a..6135a9c 100644 --- a/po/zh_CN.gmo +++ b/po/zh_CN.gmo diff --git a/po/zh_CN.po b/po/zh_CN.po index 3dc803f..6f636e8 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-ugly 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-06-07 16:28+0200\n" +"POT-Creation-Date: 2012-08-08 11:49+0100\n" "PO-Revision-Date: 2011-12-20 10:58+0800\n" "Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" diff --git a/tests/Makefile.in b/tests/Makefile.in index f8ca90d..4596b3b 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, @@ -206,7 +206,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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.in b/tests/check/Makefile.in index d7e9312..9dc8332 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, @@ -241,7 +241,9 @@ GIO_LDFLAGS = @GIO_LDFLAGS@ 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/elements/amrnbenc.c b/tests/check/elements/amrnbenc.c index 70e8502..f39deab 100644 --- a/tests/check/elements/amrnbenc.c +++ b/tests/check/elements/amrnbenc.c @@ -75,7 +75,7 @@ setup_amrnbenc (void) "could not set to playing"); caps = gst_caps_from_string (SRC_CAPS); - fail_unless (gst_pad_push_event (srcpad, gst_event_new_caps (caps))); + fail_unless (gst_pad_set_caps (srcpad, caps)); gst_caps_unref (caps); buffers = NULL; diff --git a/tests/check/elements/x264enc.c b/tests/check/elements/x264enc.c index c6a53c6..2cee989 100644 --- a/tests/check/elements/x264enc.c +++ b/tests/check/elements/x264enc.c @@ -142,7 +142,7 @@ test_video_profile (const gchar * profile, gint profile_id) gst_pad_use_fixed_caps (mysinkpad); caps = gst_caps_from_string (VIDEO_CAPS_STRING); - fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps))); + fail_unless (gst_pad_set_caps (mysrcpad, caps)); gst_caps_unref (caps); /* corresponds to I420 buffer for the size mentioned in the caps */ diff --git a/win32/common/config.h b/win32/common/config.h index ddfff03..e7fcb50 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -61,7 +61,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" /* Define to enable a52dec (used by a52dec). */ #undef HAVE_A52DEC @@ -248,7 +248,7 @@ #define PACKAGE_NAME "GStreamer Ugly Plug-ins" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GStreamer Ugly Plug-ins 0.11.92" +#define PACKAGE_STRING "GStreamer Ugly Plug-ins 0.11.93" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gst-plugins-ugly" @@ -257,7 +257,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 @@ -288,7 +288,7 @@ #undef TARGET_CPU /* Version number of package */ -#define VERSION "0.11.92" +#define VERSION "0.11.93" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ |